您传递的日期时间不是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; }}


