栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用JacksonMapper反序列化Java 8 LocalDateTime

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用JacksonMapper反序列化Java 8 LocalDateTime

您传递的日期时间不是ISO本地日期时间格式。

改成

@Column(name = "start_date")@DateTimeFormat(iso = DateTimeFormatter.ISO_LOCAL_DATE_TIME)@JsonFormat(pattern = "YYYY-MM-dd HH:mm")private LocalDateTime startDate;

并以‘2011-12-03T10:15:30’格式传递日期字符串。

但是,如果您仍要传递自定义格式,则只需指定正确的格式器即可。

改成

@Column(name = "start_date")@DateTimeFormat(iso = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))@JsonFormat(pattern = "YYYY-MM-dd HH:mm")private LocalDateTime startDate;

我认为您的问题是@DateTimeFormat完全没有作用。由于杰克逊正在执行反序列化,因此它对spring注释一无所知,我也没有看到spring在反序列化上下文中扫描此注释。

或者,您可以尝试在注册Java时间模块时设置格式化程序。

LocalDateTimeDeserializer localDateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));module.addDeserializer(LocalDateTime.class, localDateTimeDeserializer);

这是带有脱盐器的测试用例,可以正常工作。可以尝试完全摆脱该DateTimeFormat批注。

@RunWith(JUnit4.class)public class JacksonLocalDateTimeTest {    private ObjectMapper objectMapper;    @Before    public void init() {        JavaTimeModule module = new JavaTimeModule();        LocalDateTimeDeserializer localDateTimeDeserializer =  new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));        module.addDeserializer(LocalDateTime.class, localDateTimeDeserializer);        objectMapper = Jackson2ObjectMapperBuilder.json()     .modules(module)     .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)     .build();    }    @Test    public void test() throws IOException {        final String json = "{ "date": "2016-11-08 12:00" }";        final JsonType instance = objectMapper.readValue(json, JsonType.class);        assertEquals(LocalDateTime.parse("2016-11-08 12:00",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") ), instance.getDate());    }}class JsonType {    private LocalDateTime date;    public LocalDateTime getDate() {        return date;    }    public void setDate(LocalDateTime date) {        this.date = date;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485375.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号