fastjson序列化时间自定义格式的方法是什么
首先建一个项目添加依赖
org.springframework.boot spring-boot-starter-web com.alibaba fastjson 1.2.80 org.projectlombok lombok 1.18.20
写个带有时间属性的类,就叫 Task 吧,
@Data
@Accessors(chain = true)
public class Task {
private String name;
private LocalDateTime startTime;
private LocalDateTime endTime;
}看一下 fastjson 序列化方法,发现可以传个配置对象,看看这个能不能解决问题
/** * @param object 要序列化的对象 * @param config 序列化配置 * @param features */ public static String toJSONString(Object object, SerializeConfig config, SerializerFeature... features)
这个配置类里面有一个 put 方法,可以设置不同的类型使用不同的序列化器,所以我们可以通过给日期类型设置自定义的序列化器来实现自定义日期格式
/** * @param type 类型 * @param value 序列化器 */ public boolean put(Type type, ObjectSerializer value)
自定义序列化器并重写序列化方法,这里只针对 LocalDateTime 类型进行了自定义,其他类型如出一辙。
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类型进行格式转化
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("拯救地球任务").setStartTime(now).setEndTime(now.plusDays(10));
return JSON.toJSONString(task, serializeConfig);
}
}浏览器调用接口,看下结果

日期里面的 T 没有了,变成了自定义的格式,搞定!