之前已经有人打算使用此功能,因此您可以执行以下操作。但是很遗憾,由于不活动响应,该功能被拒绝了:
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
来按以下顺序解析参数:
这意味着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
,所以需要在构造函数中手动实现。
如果controller方法参数与this中的值不匹配,@modelattribute
即使@modelattribute
没有显式注释它,它也将被解析。