栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将所有用@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
来按以下顺序解析参数:

  • 从模型(如果已通过使用模型添加)。
  • 通过使用@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
    没有显式注释它,它也将被解析。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/635632.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号