SpringBoot如何简化接口大量@RequestParam参数,统一绑定为对象接收
实现方案
步骤1:定义参数接收POJO类
创建一个普通Java类作为参数接收载体,类中定义和请求参数名一一对应的属性,同时提供完整的getter/setter方法。推荐使用Lombok的@Data注解简化样板代码:
import lombok.Data; @Data // 自动生成getter、setter、toString、equals、hashCode方法 public class RequestParamBuilder { // 属性名需和请求参数名完全匹配,未传递的参数默认会被赋值为null private String optionalRequestParam1; private String optionalRequestParam2; // 依次补充剩余8个参数对应的属性 private String optionalRequestParam10; // 不使用Lombok的话,需要手动为所有属性添加getter、setter方法 }
如果需要给某参数设置自定义默认值,直接在属性定义时赋值即可:
// 该参数未传递时默认值为defaultVal,而不是null private String optionalRequestParam1 = "defaultVal";
步骤2:修改接口方法签名
注意不要在接收对象前加@RequestParam注解,SpringMVC会自动将所有请求参数和POJO的属性进行绑定:
@GetMapping("/whatever") public ResponseEntity<String> sendSomethingBack(RequestParamBuilder requestParamBuilder) { // 业务逻辑直接调用get方法取值即可 String param1 = requestParamBuilder.getOptionalRequestParam1(); return ResponseEntity.ok("请求处理完成"); }
扩展说明
- 如果需要对参数做合法性校验,可在POJO属性上添加
@NotBlank、@Min等JSR380校验注解,同时在接口参数前添加@Valid注解触发校验:public ResponseEntity<String> sendSomethingBack(@Valid RequestParamBuilder requestParamBuilder) - 若存在下划线格式的请求参数(比如
user_name),可在POJO属性上添加@JsonProperty("user_name")或者开启驼峰下划线自动转换配置完成映射。
内容的提问来源于stack exchange,提问作者stackunderflow123
相关产品推荐
相关产品推荐

