Получение неверного запроса при прохождении контроллера покоя SpringDateFilter - PullRequest
1 голос
/ 25 апреля 2020
/api/test?page=-1&size=50&nextDateOfScreening.greaterThan=2020-04-03&sort=id,asc

это мой проходной URL, и в контроллере я получаю его как

@GetMapping("/test")
    public ResponseEntity<List<ExampleDTO>> getAllTIBenScrDetails(ExampleCriteria criteria, Pageable pageable) {
        Page<ExampleDTO> page = tIBenScrDetailsQueryService.findByCriteria(criteria, pageable);
        HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
        return ResponseEntity.ok().headers(headers).body(page.getContent());
    }

и ExampleCriteria class as,

public class ExampleCriteria implements Serializable, Criteria {
    private LocalDateFilter nextDateOfScreening; //jhipster LocalDateFilter
}                                                                         

и Iam получение неверного запроса для фильтра даты как,

Field error in object 'ExampleCriteria' on field 'nextDateOfScreening.greaterThan': rejected value [2020-04-03]; codes [typeMismatch.ExampleCriteria.nextDateOfScreening.greaterThan,typeMismatch.nextDateOfScreening.greaterThan,typeMismatch.greaterThan,typeMismatch.java.time.LocalDate,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [ExampleCriteria.nextDateOfScreening.greaterThan,nextDateOfScreening.greaterThan]; arguments []; default message [nextDateOfScreening.greaterThan]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDate' for property 'nextDateOfScreening.greaterThan'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.time.LocalDate] for value '2020-04-03'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2020-04-03]]

для HigherThanEquals и lessThanEquals ошибка плохого запроса не поступает, но для большее значение и lessThan Ошибка есть. Может кто-нибудь помочь мне решить эту проблему?

1 Ответ

1 голос
/ 26 апреля 2020

Прежде всего greaterThanEquals не существует в LocalDateFilter. На самом деле это greaterOrEqualThan, поэтому nextDateOfScreening.greaterOrEqualThan.

Это причина, по которой он "работает", потому что spring не находит установщика LocalDateFilter и создает "пустой" LocalDateFilter.

Для lessThan сеттер найден, но преобразование String в LocalDate не настроено. И чтобы решить, что вы должны объявить пользовательский конвертер ->

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

@Component
public class LocalDateConverter implements Converter<String, LocalDate> {

    @Override
    public LocalDate convert(final String s) {
        return LocalDate.parse(s, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }
}
...