Я хочу получить список форм, представленных на определенную дату. Дата будет передана администратором в поле поиска (в начале она будет String, а в конце - ZonedDateTime
).
Я написал метод в репозитории как:
List<AdmissionForm> findByDateContains(ZonedDateTime datePart);
метод формирования ref: https://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-creating-database-queries-from-method-names/
Моя фоновая логика класса обслуживания выглядит так:
@Transactional(readOnly = true)
public List<AdmissionFormDTO> findByDate(ZonedDateTime datepart){
return admissionFormRepository.findByDateContains(datepart).stream()
.map(admissionFormMapper::toDto)
.collect(Collectors.toList());
}
И конечная точка Моего ресурса выглядит так:
@GetMapping("/admissionForms/date")
@Timed
public List<AdmissionFormDTO> findByDate(@RequestParam("date") String date){
log.debug("REST request to get AdmissionForms by searchTerm :" + date);
//String to ZonedDateTime method conversion from seperate class
ZonedDateTime zDate = SupportUtils.convertStringDateToZoneDateTime(date);
return admissionFormService.findByDate(zDate);
}
Я пытался использовать условия поиска в строке, и он работает нормально, но у меня возникли проблемы только с поиском по дате.
Я получил исключение как:
java.lang.IllegalArgumentException: Parameter value [%2018-11-20T00:00Z%] did not match expected type [java.time.ZonedDateTime (n/a)]' and exception = 'Parameter value [%2018-11-20T00:00Z%] did not match expected type [java.time.ZonedDateTime (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [%2018-11-20T00:00Z%] did not match expected type [java.time.ZonedDateTime (n/a)]'
Дайте некоторые исправления, чтобы я мог выполнять поиск по дате, как ожидалось.
РЕДАКТИРОВАНИЕ:
Я изменил тип данных с ZoneDateTime
на LocalDate
и решил соответственно, как показано ниже (пока пропустите время):
Код моего репозитория:
List<AdmissionForm> findByDate(LocalDate datePart);
Мой класс обслуживания:
@Transactional(readOnly = true)
public List<AdmissionFormDTO> findByDate(String datepart){
LocalDate localDatePart = SupportUtils.convertStringDateToLocalDate(datepart);
return admissionFormRepository.findByDate(localDatePart).stream()
.map(admissionFormMapper::toDto)
.collect(Collectors.toList());
}
Моя точка входа в ресурс:
@GetMapping("/admissionForms/date")
@Timed
public List<AdmissionFormDTO> findByDate(@RequestParam("date")String date){
log.debug("REST request to get AdmissionForms by searchTerm :{}",date);
return admissionFormService.findByDate(date);
}
Спасибо за ваши предложения, но не можете найти способ работать с ZondDateTime
, поэтому мы немного изменим требования. Надеюсь, что другие получат помощь от вопроса и предложенных ответов здесь.