您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何将所有用@RequestParam注释的字段收集到一个对象中

如何将所有用@RequestParam注释的字段收集到一个对象中

之前已经有人打算使用此功能,因此您可以执行以下操作。但是很遗憾,由于不活动响应,该功能被拒绝了:

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){

}

笔记:

没有为没有等效注释@RequestParamdefaultValue,所以需要在构造函数中手动实现。

如果controller方法参数与this中的值不匹配,@modelattribute即使@modelattribute没有显式注释它,它也将被解析。

其他 2022/1/1 18:24:50 有678人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶