首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Jackson - @JsonTypeInfo属性是否映射为null?

Jackson - @JsonTypeInfo属性是否映射为null?
EN

Stack Overflow用户
提问于 2015-11-09 22:21:26
回答 1查看 34.2K关注 0票数 64

我有这样的回应:

代码语言:javascript
复制
{  
    "id":"decaa828741611e58bcffeff819cdc9f",
    "statement":"question statement",
    "exercise_type":"QUESTION"
}

然后,根据exercise_type属性,我想实例化不同的对象实例(ExerciseResponseDTO的子类),所以我在下面的代码中创建了这个混合:

代码语言:javascript
复制
@JsonTypeInfo(  
    use = JsonTypeInfo.Id.NAME,  
    include = JsonTypeInfo.As.PROPERTY,  
    property = "exercise_type")  
@JsonSubTypes({  
    @Type(value = ExerciseChoiceResponseDTO.class, name = "CHOICE"),  
    @Type(value = ExerciseQuestionResponseDTO.class, name = "QUESTION")})  
public abstract class ExerciseMixIn  
{}  

public abstract class ExerciseResponseDTO {

    private String id;
    private String statement;
    @JsonProperty(value = "exercise_type") private String exerciseType;

    // Getters and setters 
}

public class ExerciseQuestionResponseDTO
    extends ExerciseResponseDTO {}

public class ExerciseChoiceResponseDTO
    extends ExerciseResponseDTO {}

因此,我按如下方式创建ObjectMapper

代码语言:javascript
复制
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(ExerciseResponseDTO.class, ExerciseMixIn.class);

我的测试:

代码语言:javascript
复制
ExerciseResponseDTO exercise = mapper.readValue(serviceResponse, ExerciseResponseDTO.class)
Assert.assertTrue(exercise.getClass() == ExerciseQuestionResponseDTO.class); // OK
Assert.assertEquals("decaa828741611e58bcffeff819cdc9f" exercise.getId()); // OK
Assert.assertEquals("question statement", exercise.getStatement()); // OK
Assert.assertEquals("QUESTION", exercise.getExerciseType()); // FAIL. Expected: "QUESTION", actual: null 

问题是,由于某些原因,在@JsonTypeInfo上用作属性的exercise_type属性被映射为null。你知道我该怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-10-04 14:28:24

根据@jscherman answer的设置,JsonTypeInfo中的'visible‘true将有助于将exercise_type作为字段访问。

如果您使用相同的类来序列化,那么产生的JSON将使exercise_type出现两次。因此最好也将include更新为JsonTypeInfo.As.EXISTING_PROPERTY

同样值得关注的是all other options的include。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33611199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档