Значение параметра [1] не соответствует ожидаемому типу - PullRequest
0 голосов
/ 07 июля 2019

В проекте Spring-boot я пытаюсь передать в качестве параметра запроса объект Date и получаю эту ошибку:

Parameter value [1] did not match expected type [java.util.Date (n/a)]

Это отправляемый http-реквизит:

http://localhost:8080/moneyManager/customer/actionBetweenDates?startDate=2019/07/01&endDate=2019/07/30

Это функция, которая запускается в состоянии покоя:

@RequestMapping(path="actionBetweenDates", method=RequestMethod.GET)
public Collection<Action> getActionByDate(@RequestParam Date startDate, @RequestParam Date endDate){
    return customerService.getAllActionBetweenDate(getSession().getId(), startDate, endDate);
}

Функция в состоянии покоя запускает функцию в обслуживании:

public Collection<Action> getAllActionBetweenDate(long customerId, Date startDate, Date endDate) {
        Collection<MethodPayment> customerMethodPayments = methodPaymentRepository.findByCustomerId(customerId);
        Collection<Action> customerActionByDates = new ArrayList<>();
        for (MethodPayment mp : customerMethodPayments) {
            customerActionByDates
                    .addAll(actionRepository.findByDateBetweenAndMethodPaymentId(mp.getId(), startDate, endDate));
        }
        return customerActionByDates;
    }

Функция в службе запускает функцию врепозиторий:

Collection<Action> findByDateBetweenAndMethodPaymentId(long methodPaymentId, Date startDate, Date endDate);

Что я делаю не так?

Обновление:

Я нашел проблему.проблема была связана с функцией, найденной в actionRepository.Сигнатура функции сначала запрашивает две даты для сравнения между ними, а затем id и я дали ей противоположные значения.Для меня ясно, что после того, как я это сделаю, у меня возникнут проблемы с датой, поэтому ответы мне помогли.Спасибо всем!

1 Ответ

1 голос
/ 07 июля 2019

Измените метод вашего контроллера на:

@RequestMapping(path="actionBetweenDates", method=RequestMethod.GET)
public Collection<Action> getActionByDate(@RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date startDate, @RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date endDate){
    return customerService.getAllActionBetweenDate(getSession().getId(), startDate, endDate);
}

Проверка Тип аннотации DateTimeFormat для получения подробной информации, примеры использования смотрите Работа с параметрами даты в Spring


UPD 1:
Добавление образца @SpringBootApplication Класс и пример запроса:

@SpringBootApplication
@RestController
public class DateProblemApp {

    public static void main(String[] args) {
        SpringApplication.run(DateProblemApp.class, args);
    }

    @RequestMapping(path="actionBetweenDates", method = RequestMethod.GET)
    public String getActionByDate(@RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date startDate, @RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date endDate) {
        return "ok";
    }

}

Пример запроса: http://localhost:8080/actionBetweenDates?startDate=2019/07/01&endDate=2019/07/30

...