Код: Выделить всё
{
"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 = toSimpleValue(rejectedValue);
return new MyClass(convertedValue);
}
private Object toSimpleValue(JsonNode node) {
return switch (node.getNodeType()) {
case NULL, MISSING -> null;
case BOOLEAN -> node.asBoolean();
case NUMBER -> node.isInt() ? node.asInt() : node.isLong() ? node.asLong() : node.asDouble();
default -> node.asString();
};
}
}
< /code>
Хотя это работает, код довольно неприятен. Я подозреваю, что должен быть более краткий/элегантный способ достичь того же результата?
Подробнее здесь: https://stackoverflow.com/questions/797 ... th-jackson
Мобильная версия