Код: Выделить всё
{
"rejectedValue": "rejected"
}
< /code>
Я пытаюсь использовать Джексон, чтобы десериализировать это в экземпляре < /p>
public record MyClass(Object rejectedValue) {
}
null < /li>
< /ul>
Так что, если свойство JSON не является нулевым типом времени выполнения соответствующего объекта Java, должно быть одним из < /p>
string < /li>
(intreger, double, in-double, in-double, ncure, number> < /p>
. и т. Д.) Я использую версию кандидата в релиз Джексона, в частности, v3.0.0.0-rc9. < /P>
import tools.jackson.databind.ValueDeserializer;
import tools.jackson.databind.JsonNode;
public class MyClassDeserializer extends ValueDeserializer {
@Override
public MyClass deserialize(JsonParser parser, DeserializationContext ctx) throws JacksonException {
JsonNode jsonRoot = parser.readValueAsTree();
JsonNode rejectedValue = jsonRoot.get("rejectedValue");
Object convertedValue = convertToSimpleValue(rejectedValue);
return new MyClass(convertedValue);
}
private Object convertToSimpleValue(JsonNode node) {
if (node == null || node.isNull()) {
return null;
} else if (node.isBoolean()) {
return node.asBoolean();
} else if (node.isInt()) {
return node.asInt();
} else if (node.isLong()) {
return node.asLong();
} else if (node.isDouble()) {
return node.asDouble();
} else {
return node.asString();
}
}
}
< /code>
Хотя это работает, код довольно неприятен. Я подозреваю, что должен быть более краткий/элегантный способ достичь того же результата?
Подробнее здесь: https://stackoverflow.com/questions/797 ... th-jackson
Мобильная версия