我希望将所有查询参数收集到pojo中,并对字段执行额外的验证。
我已经读到,我可以简单地创建一个对象,spring-boot将自动在其上设置这些请求参数。
@GetMaping public ResponseEntity<?> listEntities(@RequestParam(value = "page-number", defaultValue = "0") @Min(0) Integer pageNumber, @RequestParam(value = "page-size", defaultValue = "100") @Min(1) Integer pageSize ... )
我正在考虑创建一个名为RequestParamsDTO
的类,在这个类中,我将让查询参数负责分页。
但是,为了在RequestParamsDTO
上设置这些字段,我必须将请求param的名称与字段名匹配。但是它不会是一个有效的变量名:page-size
。
必须有一些解决办法,类似于@RequestParam
的value属性,这将在DTO中的字段中设置给定的请求参数。
请给我建议。
发布于 2019-06-06 03:48:07
在此之前,有人已经指定了此功能,因此您可以执行以下.But,不幸的是,由于不活动响应,它被拒绝了:
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
不能没有任何默认的构造函数(构造函数,即没有参数),.It应该有一个“主构造函数”,您可以使用@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
没有等效的注释,因此需要在构造函数中手动实现。@ModelAttribute
,即使@ModelAttribute
没有显式地对其进行注释。发布于 2019-06-06 09:49:27
老实说,对于一个已经存在于spring中的功能来说,这似乎是付出了很大的努力。您可以从PagingAndSortingRepository
扩展存储库,并在调用集合资源时添加分页。
也可以编写自定义查询方法(或覆盖现有查询方法)并添加以下内容:
Page<Person> findByFirstname(String firstname, Pageable pageable);
通过这种方式,spring引导将自动向请求中添加所有您想要的参数。
https://stackoverflow.com/questions/56468760
复制相似问题