Кто-то уже определил эту функцию ранее, чтобы вы могли сделать следующее. Но, к сожалению, она отклонена из-за реакции на неактивность:
public class RequestParamsDTO{
@RequestParam(value="page-number",defaultValue="0")
@Min(0)
private Integer pageNumber;
@RequestParam(value = "page-size", defaultValue = "100")
@Min(1)
Integer pageSize
}
Наиболее похожие вещи, которые вы можете сделатьиспользует его @ModelAttribute
, который разрешит параметр в следующих заказах :
- из модели, если она уже добавлена с использованием модели.
- Из сеанса HTTP с использованием @ SessionAttributes.
- Из переменной пути URI, передаваемой через конвертер (см. Следующий пример).
- Из вызова конструктора по умолчанию.
- От вызова «первичного конструктора» с аргументами, которые соответствуют параметрам запроса сервлета.Имена аргументов определяются через JavaBeans @ConstructorProperties или через имена параметров, сохраняемые во время выполнения в байт-коде.
Это означает, что RequestParamsDTO
не может не иметь никакого конструктора по умолчанию (конструктор, который не имеет аргументов)У него должен быть «первичный конструктор», который можно использовать @ConstructorProperties
, чтобы определить, какие параметры запроса сопоставляются с аргументами конструктора:
public class RequestParamsDTO{
@Min(0)
Integer pageNumber;
@Min(1)
Integer pageSize;
@ConstructorProperties({"page-number","page-size"})
public RequestParamsDTO(Integer pageNumber, Integer pageSize) {
this.pageNumber = pageNumber != null ? pageNumber : 0;
this.pageSize = pageSize != null ? pageSize : 100;
}
}
И метод контроллера становится:
@GetMaping
public ResponseEntity<?> listEntities(@Valid RequestParamsDTO request){
}
Примечания:
Не существует эквивалентной аннотации для @RequestParam
defaultValue
, поэтому необходимо внедрить ее в конструктор вручную.
Если аргумент метода контроллера не совпадает со значениями в this , он будет разрешен как @ModelAttribute
, хотя @ModelAttribute
явно не аннотирован.