Java 使用Jackson ObjectMapper反序列化或序列化任何类型的对象并处理异常

Java 使用Jackson ObjectMapper反序列化或序列化任何类型的对象并处理异常,java,generics,jackson,deserialization,jackson-databind,Java,Generics,Jackson,Deserialization,Jackson Databind,我目前正在尝试重构这段代码,以允许更多可能的类类型(用伪代码简化,但要点相同): 我们最近发现,我们可能必须在这里接受其他类型,而不仅仅是SomeSpecificClass。有没有更好的方法可以做到这一点,而不必将所有内容都更改为对象,而不是某个特定类?这样我们就可以在反序列化something中返回正确的类型(并且不必在从调用方获得返回值后强制转换它) 从示例实现开始: class JsonObjectConverter { private ObjectMapper mapper =

我目前正在尝试重构这段代码,以允许更多可能的类类型(用伪代码简化,但要点相同):


我们最近发现,我们可能必须在这里接受其他类型,而不仅仅是
SomeSpecificClass
。有没有更好的方法可以做到这一点,而不必将所有内容都更改为
对象
,而不是
某个特定类
?这样我们就可以在
反序列化something
中返回正确的类型(并且不必在从调用方获得返回值后强制转换它)

从示例实现开始:

class JsonObjectConverter {

    private ObjectMapper mapper = new ObjectMapper();

    public String serialiseToJson(Object value) {
        try {
            return mapper.writeValueAsString(value);
        } catch (JsonProcessingException e) {
            throw new IllegalArgumentException("Could not serialise: " + value, e);
        }
    }

    public <T> T deserialiseFromJson(String json, Class<T> clazz) {
        try {
            return mapper.readValue(json, clazz);
        } catch (IOException e) {
            throw new IllegalArgumentException("Could not deserialize: " + clazz, e);
        }
    }

    public SomeSpecificClass deserialiseToSomeSpecificClass(String json) {
        return deserialiseFromJson(json, SomeSpecificClass.class);
    }
}
类JSONObject转换器{
私有对象映射器映射器=新对象映射器();
公共字符串serialiseToJson(对象值){
试一试{
返回mapper.writeValueAsString(值);
}捕获(JsonProcessingException e){
抛出新的IllegalArgumentException(“无法序列化:”+value,e);
}
}
public T反序列化fromJSON(字符串json,类clazz){
试一试{
返回mapper.readValue(json,clazz);
}捕获(IOE异常){
抛出新的IllegalArgumentException(“无法反序列化:”+clazz,e);
}
}
公共SomeSpecificClass反序列化SetOsomeSpecificClass(字符串json){
返回deserialiseFromJson(json,SomeSpecificClass.class);
}
}
您可以编写两个通用方法:
serialiseToJson
deserialiseFromJson
,它们可以将任何类型序列化为
JSON
,并将
JSON
负载反序列化为给定的
类。当然,您可以为最常见和最常用的类实现一些额外的方法,如
反序列化setosomespecificclass
。您可以按照以下格式编写任意数量的方法:
反序列化setoxyz

class JsonObjectConverter {

    private ObjectMapper mapper = new ObjectMapper();

    public String serialiseToJson(Object value) {
        try {
            return mapper.writeValueAsString(value);
        } catch (JsonProcessingException e) {
            throw new IllegalArgumentException("Could not serialise: " + value, e);
        }
    }

    public <T> T deserialiseFromJson(String json, Class<T> clazz) {
        try {
            return mapper.readValue(json, clazz);
        } catch (IOException e) {
            throw new IllegalArgumentException("Could not deserialize: " + clazz, e);
        }
    }

    public SomeSpecificClass deserialiseToSomeSpecificClass(String json) {
        return deserialiseFromJson(json, SomeSpecificClass.class);
    }
}