Jackson Converter 应该抛出什么异常类型来指示无效值
What exception type shall a Jackson Converter throw to indicate an invalid value
通过以下注释,我可以告诉 Jackson 使用 Converter
class 对反序列化数据进行额外的 post 处理:
@JsonDeserialize(converter = MyConverter.class)
public MyConstrainedMap property;
例如,以下转换器会将地图转换为自定义类型 MyConstrainedMap
:
public static class MyConverter extends StdConverter<Map<String, Object>, MyConstrainedMap> {
@Override
public MyConstrainedMap convert(Map<String, Object> rawMap) {
// ... check values
return new MyConstrainedMap(rawMap);
}
}
我的问题是:无法转换怎么办?抛出杰克逊的一个例外是有意义的,例如JsonMappingException
,但该异常已被检查,并且 convert
不允许任何已检查的异常。
那我应该怎么做呢。扔一个RuntimeException
?
(答案很简单,但是因为我在网上找不到关于这个问题的任何东西,所以我想我还是分享一下。)
是,抛出任何RuntimeException
是正确的做法,如果不能转换的话。 Jackson 会将此异常包装在 JsonMappingException
中,因此产生的行为与其他解析错误相同。
通过以下注释,我可以告诉 Jackson 使用 Converter
class 对反序列化数据进行额外的 post 处理:
@JsonDeserialize(converter = MyConverter.class)
public MyConstrainedMap property;
例如,以下转换器会将地图转换为自定义类型 MyConstrainedMap
:
public static class MyConverter extends StdConverter<Map<String, Object>, MyConstrainedMap> {
@Override
public MyConstrainedMap convert(Map<String, Object> rawMap) {
// ... check values
return new MyConstrainedMap(rawMap);
}
}
我的问题是:无法转换怎么办?抛出杰克逊的一个例外是有意义的,例如JsonMappingException
,但该异常已被检查,并且 convert
不允许任何已检查的异常。
那我应该怎么做呢。扔一个RuntimeException
?
(答案很简单,但是因为我在网上找不到关于这个问题的任何东西,所以我想我还是分享一下。)
是,抛出任何RuntimeException
是正确的做法,如果不能转换的话。 Jackson 会将此异常包装在 JsonMappingException
中,因此产生的行为与其他解析错误相同。