Spring Boot - не удалось преобразовать тип [java.lang.String] в тип RequestParam

в моем контроллере у меня есть конечная точка:

  @GetMapping(value = SUMMARY_URL, produces = "application/json")
    public DailyReportSummary getSummaryOfDailyReports(
            @RequestParam(name = "from", required = false,defaultValue = "10-10-2017 ") @DateTimeFormat(pattern = "dd-MM-yyyy") LocalDateTime from,
            @RequestParam(name = "to", required = false,defaultValue = "10-10-2019 ") @DateTimeFormat(pattern = "dd-MM-yyyy") LocalDateTime to) {

        List<DailyReport> summary = statisticService.findByDateToSummary(from, to);

        DailyReportSummary dailyReportSummary = new DailyReportSummary(summary);

Я думал, что все в порядке, но у меня такая ошибка:

   There was an unexpected error (type=Bad Request, status=400).
    Failed to convert value of type 'java.lang.String' to required type 'java.time.LocalDateTime'; nested exception is org.springframework.core.convert.ConversionFailedException: 
Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam 

@org.springframework.format.annotation.DateTimeFormat java.time.LocalDateTime] for value '10-10-2017 '; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [10-10-2017 ]

Что в этом плохого? Я пытаюсь решить эту проблему, но ничего не работает.

редактировать: с удаленными iso все еще ошибки :(

Покажите нам свой почтовый запрос. Похоже, вы передаете плохо отформатированное значение для from / to.

Robert Moskal 23.07.2018 15:57

Формат даты ISO - YYYY-MM-DD, а не DD-MM-YYYY или MM-DD-YYYY. Ваши значения по умолчанию имеют неправильный формат. Также, если это только дата, зачем использовать LocalDateTime вместо LocalDate?

M. Deinum 23.07.2018 15:58

У меня нет запроса, просто я использую значения по умолчанию, чтобы избежать неправильного запроса в браузере. Я использую LocalDateTime, потому что у меня есть DATETIME в базе данных

Adam 23.07.2018 16:03
1
3
8 147
1

Ответы 1

Поскольку шаблон dd-MM-yyyy не имеет временной части, вам необходимо использовать LocalDate.

@GetMapping(value = SUMMARY_URL, produces = "application/json")
public DailyReportSummary getSummaryOfDailyReports(
        @RequestParam(name = "from", required = false, defaultValue = "10-10-2017") @DateTimeFormat(pattern = "dd-MM-yyyy") LocalDate from,
        @RequestParam(name = "to", required = false, defaultValue = "10-10-2019") @DateTimeFormat(pattern = "dd-MM-yyyy") LocalDate to) {

Другие вопросы по теме