Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SPRING MVC日期时间格式错误_Java_Spring_Spring Mvc_Datetime Format - Fatal编程技术网

Java SPRING MVC日期时间格式错误

Java SPRING MVC日期时间格式错误,java,spring,spring-mvc,datetime-format,Java,Spring,Spring Mvc,Datetime Format,我正在尝试使用Spring+Angular JS创建一个网站,我当前的问题是我使用POSTMAN发布了一条JSON语句,如下所示: { "id": 12345, "checkin" : "2017-03-01", "checkout" : "2017-03-05" } 然后会弹出这个错误: “类型定义错误:[简单类型,类java.time.LocalDate];嵌套异常为com.fasterxml.jackson.databind.exc.InvalidDefinit

我正在尝试使用Spring+Angular JS创建一个网站,我当前的问题是我使用POSTMAN发布了一条JSON语句,如下所示:

{
    "id": 12345,
    "checkin" : "2017-03-01",
    "checkout" : "2017-03-05"
}
然后会弹出这个错误:

“类型定义错误:[简单类型,类java.time.LocalDate];嵌套异常为com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造
java.time.LocalDate
的实例(不存在与默认构造类似的创建者):没有可从字符串值反序列化的字符串参数构造函数/工厂方法。”('2017-03-01')”

资源代码:

@RequestMapping(path = "", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
        consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<ReservationResponse> createReservation(
        @RequestBody
        ReservationRequest reservationRequest){
    return new ResponseEntity<>(new ReservationResponse(), HttpStatus.CREATED);
}
APIConfig代码:

@Bean
@Primary
public ObjectMapper objectMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModules(new JavaTimeModule());
    return new ObjectMapper();
}
应用程序属性:

spring.jackson.serialization.write-dates-as-timestamps=false
构建渐变:

compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.8.7'

我们也面临同样的问题,在定义了一个转换器之后,它工作得很好。你可以在应用程序中添加下面的代码,它应该工作得很好。你可以根据需要更改日期格式

@Bean
    public MappingJackson2HttpMessageConverter customJackson2HttpMessageConverter() {
       MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
       ObjectMapper objectMapper = new ObjectMapper();
          objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
          objectMapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS, true);
          objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
          objectMapper.setDateFormat(new SimpleDateFormat("dd MMM yyyy hh:mm:ss a"));
      jsonConverter.setObjectMapper(objectMapper);

      return jsonConverter;
     }

我在学习相同的教程时遇到了相同的问题。使我的代码正常工作的原因是将API配置代码中的
objectMapper()方法的返回值从
new objectMapper()更改为
to
objectMapper

可能的复制对象:您使用的是Spring Boot,因此不需要显式配置的
objectMapper
。只需将
JavaTImeModule
注册为
@Bean
。如果您使用的是Spring Boot 2,您甚至不需要这样做,因为Spring 5会自动注册
>JavaTImeModule
出现时。哇,谢谢!我刚刚删除了对象映射器,它成功了!非常感谢您的帮助,先生!
@Bean
    public MappingJackson2HttpMessageConverter customJackson2HttpMessageConverter() {
       MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
       ObjectMapper objectMapper = new ObjectMapper();
          objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
          objectMapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS, true);
          objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
          objectMapper.setDateFormat(new SimpleDateFormat("dd MMM yyyy hh:mm:ss a"));
      jsonConverter.setObjectMapper(objectMapper);

      return jsonConverter;
     }