Spring MVC中@RequestBody复杂JSON与多子类Java对象映射问题
解决Spring MVC中JSON多态对象映射问题
你遇到的问题核心在于Jackson默认无法自动识别父类Condition的子类(ComparisonCondition和BetweenCondition),它只会尝试把JSON字段映射到父类的属性上,所以当遇到value、value1这类父类没有的字段时就会抛出"未识别字段"的错误。下面是具体的解决步骤:
1. 给父类Condition添加Jackson多态注解
我们需要明确告诉Jackson,如何根据JSON中的operation字段来判断应该实例化哪个子类。在Condition类上添加以下Jackson注解:
import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "operation", // 指定用operation字段的值区分不同子类 visible = true // 保留operation字段的原始值,不被Jackson处理后移除 ) @JsonSubTypes({ // 映射operation值到对应的子类 @JsonSubTypes.Type(value = ComparisonCondition.class, names = {"equalTo", "notEqualTo"}), @JsonSubTypes.Type(value = BetweenCondition.class, name = "between") }) public class Condition { private String dataKey; private String dataType; private String operation; // 务必添加无参构造函数,Jackson默认需要它来实例化对象 public Condition() {} // 生成所有属性的getter和setter方法 }
2. 确保子类配置正确
Jackson需要无参构造函数来实例化对象,同时属性必须有对应的getter/setter才能完成字段映射:
ComparisonCondition类
public class ComparisonCondition extends Condition { private String value; public ComparisonCondition() {} // getter和setter方法 public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
BetweenCondition类
public class BetweenCondition extends Condition { private String value1; private String value2; public BetweenCondition() {} // getter和setter方法 public String getValue1() { return value1; } public void setValue1(String value1) { this.value1 = value1; } public String getValue2() { return value2; } public void setValue2(String value2) { this.value2 = value2; } }
3. 修正JSON中的拼写错误
你的JSON里有一个笔误:"dataType": "strubg"应该改成"dataType": "string",否则Jackson映射dataType字段时会出现不必要的异常。
4. 检查Filter和Student类的基础配置
确保Filter<T>类的泛型T(这里是Student)包含id和name属性,并且提供了无参构造函数以及对应的getter/setter方法,这样Jackson才能正确映射JSON中的entity部分。
完成以上步骤后,Spring MVC就能正确将你的JSON请求体映射到Filter<Student>对象,之前的"未识别字段"错误也会被解决。
内容的提问来源于stack exchange,提问作者liam xu
相关产品推荐
相关产品推荐

