Java8
的日期相關(guān) API
用起來是真香瘩绒,但免不了遇到在用舊版 1.0 API
的情況。這不带族,跟另一個部門做對接锁荔,人家說你發(fā)過來的時間怎么帶個 T
,我這邊沒法解析蝙砌。阳堕。。我回頭就是一句xxx择克,情緒發(fā)泄完該做的事咱也得做不是恬总,下面就看看怎么處理這個問題。
首先建一個項目肚邢,添加依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.80</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
</dependencies>
寫個帶有時間屬性的類壹堰,就叫 Task
吧,
@Data
@Accessors(chain = true)
public class Task {
private String name;
private LocalDateTime startTime;
private LocalDateTime endTime;
}
看一下 fastjson
序列化方法骡湖,發(fā)現(xiàn)可以傳個配置對象贱纠,看看這個能不能解決問題
/**
* @param object 要序列化的對象
* @param config 序列化配置
* @param features
*/
public static String toJSONString(Object object, SerializeConfig config, SerializerFeature... features)
這個配置類里面有一個 put
方法,可以設(shè)置不同的類型使用不同的序列化器响蕴,所以我們可以通過給日期類型設(shè)置自定義的序列化器來實現(xiàn)自定義日期格式
/**
* @param type 類型
* @param value 序列化器
*/
public boolean put(Type type, ObjectSerializer value)
自定義序列化器并重寫序列化方法谆焊,這里只針對 LocalDateTime
類型進(jìn)行了自定義,其他類型如出一轍换途。
public class JsonSerializer implements ObjectSerializer {
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
SerializeWriter out = serializer.getWriter();
if (object == null) {
serializer.getWriter().writeNull();
return;
}
// 對LocalDateTime類型進(jìn)行格式轉(zhuǎn)化
out.write("\"" + ((LocalDateTime) object).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "\"");
}
}
配置類中注入 Spriing
容器
@Configuration
public class JsonConfig {
@Bean
public SerializeConfig serializeConfig() {
SerializeConfig config = new SerializeConfig();
// 對LocalDateTime類型指定自定義的序列化器
config.put(LocalDateTime.class, objectSerializer());
return config;
}
@Bean
public ObjectSerializer objectSerializer() {
return new JsonSerializer();
}
}
寫個接口坐下測試
@RestController
@RequestMapping
public class FastJsonDemo {
@Autowired
private SerializeConfig serializeConfig;
@RequestMapping("/test")
public String jsonTest() {
LocalDateTime now = LocalDateTime.now();
Task task = new Task().setName("拯救地球任務(wù)").setStartTime(now).setEndTime(now.plusDays(10));
return JSON.toJSONString(task, serializeConfig);
}
}
瀏覽器調(diào)用接口懊渡,看下結(jié)果
日期里面的 T
沒有了刽射,搞定!