Я использую datastore двигателя приложения, поэтому у меня есть сущность, подобная этому.Как узнать, какой класс десериализуется в JackSon Deserializer?
@PersistenceCapable
public class Author {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@JsonProperty("id")
@JsonSerialize(using = JsonKeySerializer.class)
@JsonDeserialize(using = JsonKeyDeserializer.class)
private Key key;
....
}
Когда модель отправлена для просмотра, она будет сериализовать объект Key как значение Id. Затем, если я отправлю данные обратно из представления, я хочу десериализовать идентификатор обратно к объекту Key, используя класс JsonKeyDeserializer
.
public class JsonKeyDeserializer extends JsonDeserializer<Key> {
@Override
public Key deserialize(JsonParser jsonParser, DeserializationContext deserializeContext)
throws IOException, JsonProcessingException {
String id = jsonParser.getText();
if (id.isEmpty()) {
return null;
}
// Here is the problem because I have several entities and I can't fix the Author class in this deserializer like this.
// I want to know what class is being deserialized at runtime.
// return KeyFactory.createKey(Author.class.getSimpleName(), Integer.parseInt(id))
}
}
Я пытался отладить значение в параметрах десериализации, но я не могу найти способ получить целевую десериализацию класса. Как я могу это решить?
Hi, StaxMan. Спасибо за ответ на мой вопрос, но вы можете неправильно понять мой вопрос о 'KeyDeserializer', потому что я уже использовал' JsonDeserializer' для десериализации значения. Кроме того, извините, что я не упомянул, что использую Spring MVC, поэтому я использую автор '@RequestBody Author' для преобразования JSon в Java Object. Затем, после поиска 'ContextualSerializer', я думаю, что я не могу использовать его таким образом правильно? Пожалуйста, сообщите мне, если я ошибаюсь. –
Ах. Плохо, читал слишком быстро. :) – StaxMan
Что касается того, работает ли ContextualSerializer/Deserializer: то, что вы могли бы выяснить, - это тип «Key» - это ожидаемый статический тип. Я не уверен, что этого будет достаточно. И поскольку вы используете аннотацию, регистрация сериализаторов (de) не имеет значения: они не используются в этом случае. – StaxMan