之前已经有人打算使用此功能,因此您可以执行以下操作。但是很遗憾,由于不活动响应,该功能被拒绝了:
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来按以下顺序解析参数:
- 从模型(如果已通过使用模型添加)。
- 通过使用@SessionAttributes在HTTP会话中进行。
- 来自通过Converter传递的URI路径变量(请参见下一个示例)。
- 从默认构造函数的调用开始。
- 从调用具有与Servlet请求参数匹配的参数的“主要构造函数”开始。参数名称是通过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; }}控制器方法变为:
@GetMapingpublic ResponseEntity<?> listEntities(@Valid RequestParamsDTO request){}笔记:
没有为没有等效注释
@RequestParam
的defaultValue
,所以需要在构造函数中手动实现。如果controller方法参数与this中的值不匹配,
@ModelAttribute
即使@ModelAttribute
没有显式注释它,它也将被解析。



