私はこの問題に取り組んでいます。のは、私はこのレスポンスを持っているとしましょう:Jackson - @JsonTypeInfoプロパティがnullとしてマップされていますか?
{
"id":"decaa828741611e58bcffeff819cdc9f",
"statement":"question statement",
"exercise_type":"QUESTION"
}
その後、exercise_type属性に基づいて私は別のオブジェクトインスタンス(ExerciseResponseDTO
のサブクラス)をインスタンス化したいので、私はこのミックスを作成:だから
@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 {}
01:
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(ExerciseResponseDTO.class, ExerciseMixIn.class);
私のテストを次のように私は私のObjectMapper
を作成します
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属性がヌルとしてマッピングされている、ということです。 どのように私はこれを解決することができますか?
良い知見。 :) – Rick
[古代の知恵](https://xkcd.com/979/) –