Прекратить чтение чисел Джексона как String - PullRequest
1 голос
/ 28 марта 2019

Джексон читает входные числа как строки. В качестве примера ниже класса Студент прочитайте имя 4567 как String.

напр .: ввод

{
name: 4567
...
}

класс Java

Class Student {

String name;
...
}

Джексон анализирует текст JSON и отображает числовое значение в строковое поле, и я не хочу преобразование типа, то есть для преобразования числа в строку. В этом сценарии Джексон преобразует значение из int (4567) в строку («4567»). Как это поведение может измениться, чтобы вызвать исключение, если другой тип предоставлен, чтобы потерпеть неудачу?

1 Ответ

3 голосов
/ 28 марта 2019

Пользовательский десериализатор, зарегистрированный для java.lang.String, обязательно должен работать и позволять вам предотвращать конвертацию. Десериализаторы будут напрямую просматривать контент через JsonParser, чтобы они могли определять базовый тип токена.

Это вам поможет:

public class ForceStringDeserializer extends JsonDeserializer<String> {

    @Override
    public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
        if (jsonParser.getCurrentToken() == JsonToken.VALUE_NUMBER_INT) {
            throw deserializationContext.wrongTokenException(jsonParser, JsonToken.VALUE_STRING, "Attempted to parse int to string but this is forbidden");
        }
        return jsonParser.getValueAsString();
    }
}

Вы можете найти больше информации здесь .

...