gpt4 book ai didi

java - 在 jackson 中禁用数字到字符串的自动转换

转载 作者:行者123 更新时间:2023-12-02 04:12:43 28 4
gpt4 key购买 nike

当我向spring boot后端发出json请求时,Jackson会自动将数字转换为字符串。有办法防止这种情况吗?

例如:

JSON格式

{
"numberAsString": 123
}


爪哇

private String numberAsString;


将json值绑定到Java字段 numberAsString等于 "123"之后。我需要防止这种自动转换,并且在发生这种情况时需要引发某种异常。

最佳答案

您可以创建自定义反序列化器,并使用@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());
}

关于java - 在 jackson 中禁用数字到字符串的自动转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56678885/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com