Я хочу получить список форм, представленных на определенную дату. Дата будет передана администратором в поле поиска (из внешнего интерфейса это будет строка, но в конце это ZonedDateTime
).
Я написал метод в репозитории как:
List<AdmissionForm> findByDateContains(ZonedDateTime datePart);
метод формирования ссылки: https://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-creating-database-queries-from-method-names /
Фоновая логика класса My Service выглядит следующим образом:
@Transactional(readOnly = true)
public List<AdmissionFormDTO> findByDate(ZonedDateTime datepart){
return admissionFormRepository.findByDateContains(datepart).stream()
.map(admissionFormMapper::toDto)
.collect(Collectors.toList());
}
А конечная точка My Resource выглядит следующим образом:
@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);
}
Я пробовал с поисковыми терминами String, и он работает нормально, но у меня возникли проблемы только с поиском по дате.
Я получил исключение:
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)]'
Give некоторые исправления, чтобы я мог выполнять поиск по дате, как и ожидалось.
EDITED: я изменил тип данных с 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
так мы немного меняем требования. Надеюсь, что другие получат помощь от вопроса и предложенных ответов здесь.