Отключить автоматическое преобразование числа в строку в Джексоне - PullRequest
0 голосов
/ 20 июня 2019

Когда я делаю json-запрос к бэкенду с весенней загрузкой, Джексон автоматически конвертирует числа в строки.Есть ли способ предотвратить это?

Например:

JSON

{
    "numberAsString": 123
}

JAVA

private String numberAsString;

после привязки значения json к полю java numberAsString равно "123".мне нужно предотвратить это автоматическое преобразование, и мне нужно выдать какое-то исключение, когда это произойдет.

1 Ответ

0 голосов
/ 20 июня 2019

Вы можете создать собственный десериализатор и аннотировать свой тип с помощью @JsonDeserialize аннотации:

public class CustomDeserializer extends StdDeserializer<String> {
    protected CustomDeserializer() {
        super(String.class);
    }

    @Override
    public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
        JsonToken currentToken = jsonParser.getCurrentToken();
        int id = currentToken.id();
        if(id != JsonToken.VALUE_STRING.id()) {
            throw new IOException("Field value is not string json type");
        } else {
            return currentToken.asString();
        }
    }
}

А затем в классе вашей модели:

@JsonDeserialize(using = CustomDeserializer.class)
private String numberAsString;

Вы также можете создать собственное исключениекоторый расширяет IOException и выбрасывает его из вашего десериализатора.

Если вы не хотите аннотировать каждое поле, как это, вы можете настроить глобальное отображение объектов, используя его конструктор:

@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
    return new Jackson2ObjectMapperBuilder()
             .deserializerByType(String.class, new CustomDeserializer());
}
...