- LocalDateTime传值JSON格式化问题
- 推荐方法
- 其它方法
- LocalDateTime的json格式化问题
- 解决方式一
- 解决方式二
LocalDateTime传值JSON格式化问题
LocalDateTime是JDK8中提供的新功能,极大的优化了原生日期时间类的使用。
但是第一次使用该类可能会在传值过程中出现格式化的小问题(如:JSON无法解析前端所传格式,序列化时LocalDateTime成为数组等),以下提供简单的解决方案。
推荐方法
在WebMvcConfigurer实现类下完成以下两步
1).注册一个Converter实现类,其作用是处理于url所携带的参数上(如:@RequestParam、@PathVariable )的LocalDateTime参数;
2).增加一个序列化、反序列化器,作用为处理实体类的的LocalDateTime属性。
P.S.经过多轮测试,得出了以上方法,由于该方法需要以上两个步骤,作为完美主义者,我曾尝试用一个步骤解决,但并未如愿以偿,若你有更好的方法,还望不吝赐教,先行谢过。
源码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
// import … @Configuration @EnableWebMvc public class WebMvcConfig implements WebMvcConfigurer { /** * 自定义String转LocalDateTime方法,此方法将会作用于url所携带的参数上 */ static class StringToLocalDateTimeConverter implements Converter { @Override public LocalDateTime convert(String s) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern( “yyyy-MM-dd HH:mm:ss” ); return LocalDateTime.parse(s, formatter); } } /** * 将上述自定义方法进行添加 */ @Override public void addFormatters(FormatterRegistry registry) { registry.addConverter( new StringToLocalDateTimeConver服务器托管网ter()); } /** * 增加序列化与反序列化器,它们将作用于实体类的LocalDateTime属性。 */ @Override public void configureMessageConverters(List> converters) { DateTimeFormatter pattern = DateTimeFormatter.ofPattern( “yyyy-MM-dd HH:mm:ss” ); ObjectMapper objectMapper = new ObjectMapper(); JavaTimeModule module = new JavaTimeModule(); module.addSerializer(LocalDateTime. class , new LocalDateTimeSerializer(pattern)); module.addDeserializer(LocalDateTime. class , new LocalDateTimeDeserializer(pattern)); objectMapper.registerModule(module); converters.add( new MappingJackson2HttpMessageConverter(objectMapper)); } } |
其它方法
url参数:
给参数加上@DateTimeFormat(此注解来自Spring,无需引入其他包),在pattern中标注约定好的格式即可。
1 2 3 |
public void Test( @RequestParam @DateTimeFormat (pattern = “yyyy-MM-dd HH:mm:ss” ) LocalDateTime time) { … } |
实体类:
在实体类中的属性上添加@JsonFormat(此注解来自Jackson,该包被Spring所依赖,无需导入),同样在pattern中标注好格式。
1 2 3 4 5 6 |
@Data public class Demo { @JsonFormat (pattern = “yyyy-MM-dd HH:mm:ss” ) private LocalDateTime time; } |
由于这种方法需要对代码中所有的LocalDateTime都进行标注,相对麻烦,且耦合度高,所以不作推荐。
LocalDateTime的json格式化问题
LocalDateTime 的 json 格式化存在问题如图所示:
解决方式一
添加json格式化配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 |
@Configuration public class LocalDateTimeSerializerConfig { @Value ( “${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}” ) private String pattern; public LocalDateTimeSerializer localDateTimeDeserializer() { return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern)); } @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return builder -> builder.serializerByType(LocalDateTime. class , localDateTimeDeserializer()); } } |
解决方式二
@JsonFormat 注解
上面的方案全局生效,当全局的格式化方式无法满足我们需求时,我们对日期格式要做特殊的处理:在类的属性上添加注解
1 2 3 |
@JsonFormat (pattern = “yyyy-MM-dd” ) @ApiModelProperty (value = “创建时间” ) private LocalDateTime createTime; |
加上效果后:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
GameFi软件的开发是结服务器托管网合了区块技术,它是将游戏的元素移动到上链上,让游戏变得独立,这就符合了用户的娱乐方式。该软件项目还具有一定的投资价格,GameFi系统开发的应用可以带来更多的创新和价值。 GameFi的软件开发应用程序是让用户更好的管理自…