首页 > 解决方案 > Jackson 转换器应抛出什么异常类型以指示无效值

问题描述

通过以下注释,我可以告诉 Jackson 使用一个Converter类对反序列化数据进行额外的后处理:

@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);
    }
}

我的问题是:如果无法转换怎么办?抛出 Jackson 的异常之一是有意义的,例如JsonMappingException,但该异常已被检查,并且convert不允许任何已检查的异常。

那么我应该怎么做呢。扔一个RuntimeException

标签: javajsonjacksonjackson-databind

解决方案


(答案很简单,但是由于我在互联网上找不到有关此问题的任何内容,所以我想无论如何我都会分享它。)

RuntimeException的,如果某些东西无法转换,则抛出 any是正确的做法。然后这个异常会JsonMappingException被 Jackson 包装在 a 中,因此结果行为与其他解析错误相同。


推荐阅读