मैं इस समस्या से निपट रहा हूं। मान लीजिए कि मैं इस प्रतिक्रिया करते हैं: पर exercise_type विशेषता आधारित फिरजैक्सन - @JsonTypeInfo संपत्ति को शून्य के रूप में मैप किया जा रहा है?
{
"id":"decaa828741611e58bcffeff819cdc9f",
"statement":"question statement",
"exercise_type":"QUESTION"
}
, मैं विभिन्न वस्तुओं उदाहरणों (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 {}
तो मैं अपने ObjectMapper
बनाने के रूप में
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(ExerciseResponseDTO.class, ExerciseMixIn.class);
मेरा परीक्षण इस प्रकार है:
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
समस्या यह है कि, किसी कारण से, exercise_type विशेषता संपत्ति के रूप में @JsonTypeInfo
पर के रूप में अशक्त मैप किया जा रहा है इस्तेमाल किया जा रहा है। कोई विचार है कि मैं इसे कैसे हल कर सकता हूं?
अच्छी खोज। :) – Rick
[प्राचीनों की बुद्धि] (https://xkcd.com/979/) –