Вы можете создать собственный десериализатор и аннотировать свой тип с помощью @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());
}