Поисковые данные Spring Boot по дате (отформатированы в ZonedDateTime)

Purvik Rana спросил: 22 октября 2018 в 09:03 в: java

Я хочу получить список форм, представленных на определенную дату. Дата будет передана администратором в поле поиска (из внешнего интерфейса это будет строка, но в конце это 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 так мы немного меняем требования. Надеюсь, что другие получат помощь от вопроса и предложенных ответов здесь.

0 ответов