You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:15:33