我的问题很简单:下面是一个简单的类:
public class Foo {
private int id = -1;
public void setId(int _id){ this.id = _id; }
public int getId(){ return this.id; }
}
我正在尝试处理以下JSON:
{
"id": "blah"
}
显然,这里有个问题(“blah”不能解析为int)
以前,Jackson会抛出类似于org.codehaus.jackson.map的异常:无法从字符串值“blah”构造java.lang.Integer的示例:不是有效的整数值
我同意这一点,但我想注册一些东西,允许忽略这种类型的Map错误。我尝试注册一个DeserializationProblemHandler(参见here),但它似乎只对未知属性起作用,而不是反序列化问题。
你对这个问题有什么头绪吗?
5条答案
按热度按时间deyfvvtc1#
我成功地解决了我的问题,感谢来自JacksonML的塔图。
我不得不为Jackson中处理的每个原语类型使用自定义的非阻塞反序列化器。
然后像这样调用它(只将那些你想成为非阻塞的反序列化器作为反序列化器传递):
pb3s4cty2#
您可能希望通过添加处理此特定异常的方法来让控制器处理此问题
当然,那条线
在某些情况下可能会抛出类强制转换异常,但我还没有遇到过。
7cjasjjr3#
我写了一个简单的错误处理程序,它会给予你一些错误,你可以返回给用户的错误请求作为状态码。使用@JsonProperty required = true来获取与丢失属性相关的错误。Jackson版本2.9.8。
在全局通知中调用这个类对象
z9ju0rcb4#
创建一个简单的Map器:
}
xoefb8l85#
DeserializationProblemHandler现在有了更多的方法,比如
handleUnexpectedToken
和handleWeird*Value
,它应该能够处理任何需要的东西。子类化它,覆盖你需要的方法,然后用
addHandler(DeserializationProblemHandler h)
把它添加到你的ObjectMapper
中。