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

Spring Boot Controller如何接收两种不同类型的RequestBody对象

Spring Boot Controller接收多类型RequestBody解决方案
  • 方案1:使用Jackson内置多态反序列化(推荐)
    这是最符合Spring MVC序列化规范的实现方式,无需额外手动转换逻辑:
  1. 定义公共父类/接口,添加Jackson多态配置注解
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import java.io.Serializable;

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
        @JsonSubTypes.Type(value = Apple.class, name = "APPLE"),
        @JsonSubTypes.Type(value = Orange.class, name = "ORANGE")
})
public abstract class Fruit implements Serializable {
    // 可提取Apple和Orange的公共字段放在此处
}
  1. 让Apple、Orange类继承该父类即可,无需修改原有类的其他逻辑
  2. 调整Controller接收参数类型为父类Fruit:
public MyResponse myMethod(@ApiParam(value = "myRequest", required = true) @RequestBody Fruit mulRequest) {
    if (mulRequest instanceof Apple apple) {
        // 执行Apple对应的处理逻辑
    } else if (mulRequest instanceof Orange orange) {
        // 执行Orange对应的处理逻辑
    }
}

调用接口时只需在请求JSON中携带"type": "APPLE"或"type": "ORANGE"字段即可,Jackson会自动完成类型反序列化。

  • 方案2:无侵入式手动判断转换(无需修改请求结构)
    如果不想在请求参数中额外加type标识,可以先接收原始JSON再根据两个类的独有字段判断后转换:
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public MyResponse myMethod(@ApiParam(value = "myRequest", required = true) @RequestBody String json) throws JsonProcessingException {
    ObjectMapper objectMapper = new ObjectMapper();
    JsonNode rootNode = objectMapper.readTree(json);
    // 示例:假设Apple独有字段为sweetness,Orange独有字段为sourness,按实际业务调整判断条件
    if (rootNode.has("sweetness")) {
        Apple apple = objectMapper.readValue(json, Apple.class);
        // 执行Apple对应的处理逻辑
    } else if (rootNode.has("sourness")) {
        Orange orange = objectMapper.readValue(json, Orange.class);
        // 执行Orange对应的处理逻辑
    } else {
        // 非法参数异常处理
    }
}

注意事项

Java类名需遵循大驼峰命名规范,建议将原有apple、orange类名调整为Apple、Orange。


内容的提问来源于stack exchange,提问作者Gopikrishna X Gopalakrishnan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:15:03