Springboot传参中对LocalDateTime的支持

您所在的位置:网站首页 localdatetime序列化 Springboot传参中对LocalDateTime的支持

Springboot传参中对LocalDateTime的支持

#Springboot传参中对LocalDateTime的支持| 来源: 网络整理| 查看: 265

1. 说明

对于@RequestBody注解,Springboot默认使用Jackson实现json字符串和java对象之间的转换(序列化和反序列化);也可进行修改使用阿里的fastjson(本文不介绍),Jackson不支持LocalDateTime与格式yyyy-MM-dd HH:mm:ss之间的转换,需要自定义转换。

对于@RequestParam注解,需要自定义转换器。

2. 格式化@RequestBody时间

a) 方法1

直接在类成员变量上加注解进行转换(注意时区),只对单个类有效。LocalDate、LocalTime类似。

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime time;

b) 方法2(推荐)

定制Jackson时间序列化和反序列化方式,添加对LocalDateTime、LocalDate、LocalTime的支持。

//引入第3方jar包,可能以后Jackson更新版本会默认支持LocalDateTime compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.9.4'

 

/** * @author: bys319.com */ @Configuration public class JacksonConfig { @Bean public ObjectMapper getObjectMapper() { ObjectMapper om = new ObjectMapper(); om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); om.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); JavaTimeModule javaTimeModule = new JavaTimeModule(); //日期序列化 javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); //日期反序列化 javaTimeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); javaTimeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); javaTimeModule.addDeserializer(LocalTime.class,new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); om.registerModule(javaTimeModule); return om; } }

 

3. 格式化@RequestParam时间

a) 方法1

直接对参数加注解进行转换。

 

@GetMapping(path = "date") public String world(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime datetime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date, @RequestParam @DateTimeFormat(pattern = "HH:mm:ss") LocalTime time) { return "test datetime"; }

 

b) 方法2(推荐)

分别定义处理LocalDateTime、LocalDate、LocalTime的转换器。

/** * @author: bys319.com */ @Configuration public class DateConverterConfig { //不要听信idea的自动提示将代码转化成lambda方式,会报错 @Bean public Converter LocalDateTimeConvert() { return new Converter() { @Override public LocalDateTime convert(String source) { DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime date = null; try { date = LocalDateTime.parse(source, df); } catch (Exception e) { e.printStackTrace(); } return date; } }; } @Bean public Converter LocalDateConvert() { return new Converter() { @Override public LocalDate convert(String source) { DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate date = null; try { date = LocalDate.parse(source, df); } catch (Exception e) { e.printStackTrace(); } return date; } }; } @Bean public Converter LocalTimeConvert() { return new Converter() { @Override public LocalTime convert(String source) { DateTimeFormatter df = DateTimeFormatter.ofPattern("HH:mm:ss"); LocalTime date = null; try { date = LocalTime.parse(source, df); } catch (Exception e) { e.printStackTrace(); } return date; } }; } }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3