当我向spring boot后端发出json请求时,Jackson会自动将数字转换为字符串。有办法防止这种情况吗?
例如:
JSON
{
"numberAsString": 123
}
JAVA
private String numberAsString;
将JSON值绑定到Java字段numberAsString
后,等于"123"
。我需要阻止这种自动转换,并且需要在发生这种情况时引发某种异常。
答案 0 :(得分:0)
您可以创建自定义反序列化器,并使用@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());
}