public class abc {
@JsonRawValue
@JsonDeserialize(using =abc.JsonAsStringDeserializer.class)
private String a1;
private String a2;
}
public static final class JsonAsStringDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode tree = objectMapper.readTree(jsonParser);
return tree.toString(); //want to use asText() here as toString doesn't always give valid json.
}
}
У меня возникла проблема при десериализации с использованием пользовательского десериализатора и метода asText() Джексона.
Serialized output comes out to be like this "{\"a1\":{\"dummy\":\"value\"},\"a2\":\"some data\"}";
В пользовательском десериализаторе (JsonAsStringDeserializer) получается значение {"dummy":"value"}
, поскольку a1 использует только пользовательский десериализатор.
Я хотел бы вернуть всю строку {"dummy":"value"}
в пользовательском десериализаторе. Это отлично работает, когда я использую метод toString(), однако, когда я использую tree.asText() [хочу использовать это для получения действительного json], он возвращает пустую строку. Я просмотрел документацию asText(), где говорится, что для использования asText() JsonNode должен быть ValueNode. Могу ли я что-то сделать по этому поводу? Я хотел бы использовать asText() для получения действительного json. Я также посмотрел на textValue(), и у него та же проблема, что и у asText().
Есть ли способ сделать этот {"dummy":"value"}
ValueNode в Джексоне и вернуться с помощью tree.asText(). Я пробовал лить его, и он не работает.
Помощь приветствуется :)