如何将@RequestParam转换为自定义SearchDto对象优化搜索请求?
直接用SearchDto作为Spring MVC控制器参数的解决方案
当然可以直接把SearchDto作为控制器方法的参数,Spring MVC会自动帮你完成请求参数到嵌套对象的绑定,不用再手动转换Map了,步骤很简单:
核心要求
只要你的SearchDto和Code类符合JavaBean规范即可:
- 要有无参构造方法
- 每个字段都对应提供getter和setter方法(嫌麻烦的话用Lombok的
@Data注解一键生成) - 请求参数的命名要和对象的层级结构对应,比如示例里的
code.phone,就对应SearchDto里的code字段(类型为Code),而Code类里需要有phone字段
代码示例
1. Code类
public class Code { private String phone; public Code() {} public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
2. SearchDto类
public class SearchDto { private String name; private Code code; public SearchDto() {} public String getName() { return name; } public void setName(String name) { this.name = name; } public Code getCode() { return code; } public void setCode(Code code) { this.code = code; } }
3. 控制器方法
@RestController @RequestMapping("/api") public class SearchController { @GetMapping public String search(SearchDto searchDto) { // 直接使用searchDto中的参数即可 String name = searchDto.getName(); String phone = searchDto.getCode().getPhone(); return String.format("查询参数:name=%s, phone=%s", name, phone); } }
额外说明
- 如果请求参数名和对象字段名不匹配,比如请求参数是
user_name但字段是name,可以在字段上用@RequestParam("user_name")指定映射关系;不过像示例里的层级式参数code.phone,Spring会自动识别嵌套对象,无需额外配置 - 使用Lombok的话,直接给Code和SearchDto添加
@Data注解,就能省去编写构造方法、getter和setter的代码,代码会更简洁
内容的提问来源于stack exchange,提问作者Evillain
相关产品推荐
相关产品推荐

