ВЕСНА MVC DateTimeFormat ошибка - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь создать сайт, используя 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 (без создателей, как конструкция по умолчанию, существовать): нет конструктора аргумента String / метода фабрики для десериализации из значения String ('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);
}

Код модели:

public class ReservationRequest {
    private Long id;
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private LocalDate checkin;
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private LocalDate checkout;}

Код 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

Сборка Gradle:

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

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Я работал над тем же учебником и столкнулся с той же проблемой. То, что заставило мой код работать, состояло в том, чтобы изменить возвращаемое значение метода objectMapper() в API Config Code с new ObjectMapper() на objectMapper.

0 голосов
/ 02 мая 2018

Мы также столкнулись с той же проблемой, и после определения конвертера он работал нормально. Вы можете добавить ниже код в приложении, и он должен работать нормально. Вы можете изменить формат даты в соответствии с вашими потребностями.

@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;
     }
...