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

Spring MVC如何在请求体的实体对象外传递额外自定义字段

解决方案

下面是两种完全不需要修改原有Course实体类的实现方式:

方案1:新增接口请求DTO(最推荐)

这是符合开发分层规范的常规做法,核心Course实体类对应业务/持久层模型,接口入参单独用DTO(数据传输对象)承接,避免非业务字段污染核心实体。

  1. 新建CoursePostRequest.java类,继承原有Course类,补充额外字段:
// 用Lombok的话直接加@Data注解,省去手写getter、setter
public class CoursePostRequest extends Course {
    private Integer page_size;
    private String sort_order;

    // 手动补充两个字段的getter、setter方法
    public Integer getPage_size() {
        return page_size;
    }
    public void setPage_size(Integer page_size) {
        this.page_size = page_size;
    }
    public String getSort_order() {
        return sort_order;
    }
    public void setSort_order(String sort_order) {
        this.sort_order = sort_order;
    }
}
  1. 修改接口入参类型为新建的DTO即可:
public Course postcourse (@RequestBody CoursePostRequest request) {
    // 原有Course相关逻辑直接用request即可(它本身是Course的子类)
    // 需要取额外参数直接调用对应getter方法就行
}

该方案后续加参数校验、新增入参都很方便,维护性最高。

方案2:用Map承接请求体再手动解析

如果不想额外新增类,可以先用Map接收完整请求体,再单独解析出Course对象和额外参数:

public Course postcourse (@RequestBody Map<String, Object> requestMap) {
    // 转换核心Course字段
    ObjectMapper objectMapper = new ObjectMapper();
    Course course = objectMapper.convertValue(requestMap, Course.class);
    // 单独获取额外参数
    Integer pageSize = (Integer) requestMap.get("page_size");
    String sortOrder = (String) requestMap.get("sort_order");

    // 后续业务逻辑
}

该方案不用新增类,但没有编译期参数校验,适合参数临时新增、后续不会频繁变动的场景。

内容的提问来源于stack exchange,提问作者rudeTool

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 16:24:09