gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:52:33 24 4
gpt4 key购买 nike

我想将我所有的查询参数收集到一个 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 上设置这些字段,我必须将请求参数的名称与字段名称相匹配。但它不是有效的变量名:page-size .

必须有一些解决方法,类似于 @RequestParam的值属性,它将在 DTO 中的我的字段上设置给定的请求参数。

请指教。

最佳答案

有人已经设计了这个feature之前,您可以执行以下操作。但不幸的是,由于不活动响应而被拒绝:

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,它将解析以下orders 中的参数。 :

  • From the model if already added by using Model.
  • From the HTTP session by using @SessionAttributes.
  • From a URI path variable passed through a Converter (see the next example).
  • From the invocation of a default constructor.
  • From the invocation of a “primary constructor” with arguments that match to Servlet request parameters. Argument names are determined through JavaBeans @ConstructorProperties or through runtime-retained parameter names in the bytecode.

这意味着 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;
}
}

Controller 方法变为:

@GetMaping
public ResponseEntity<?> listEntities(@Valid RequestParamsDTO request){

}

注意事项:

  • @RequestParamdefaultValue没有对应的注解,需要在构造函数中手动实现。

  • 如果 Controller 方法参数与 this 中的值不匹配,它将解析为 @ModelAttribute,即使 @ModelAttribute 没有明确注释。

关于spring-boot - 如何将所有用@RequestParam注解的字段收集到一个对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56468760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com