我创建了一个简单的ObjectMapper方法,用于将地图反序列化为DTO类。见下文:

    RequestDTO requestDTO;
    public static requestDTO deserializeRequestBody(HashMap<String,Object> requestMap) {
    try {
    requestDTO = objectMapper.readValue(objectMapper.writeValueAsString(requestMap), RequestDTO.class);
    } catch (JsonProcessingException e) {
                        e.printStackTrace();
    }
    return requestDTO;
    }


在上面的代码中,requestMap使用writeValueAsString转换为JSON字符串,然后通过readValue由RequestDTO类使用。

问题:我有多个RequestDTO类(POJO),我想使用同一个ObjectMapper(如上所述)。我希望映射器能够解析映射到哪个POJO类,而无需我为每个类ex显式编写它:

//Don't want to do this
objectMapper.readValue(objectMapper.writeValueAsString(requestMap), RequestDTO1.class);
objectMapper.readValue(objectMapper.writeValueAsString(requestMap), RequestDTO2.class);
objectMapper.readValue(objectMapper.writeValueAsString(requestMap), RequestDTO3.class);


我希望基于从requestMap读取的JSON键来解析POJO类,或者是否有更好的方法来唯一地标识要用于映射的类。

最佳答案

您将Map序列化为JSON对象,然后将此JSON对象解析为Java类实例。这看起来有点复杂。

如果要根据映射中的键决定实例化哪个Java类,则可以手动实现此逻辑。查看映射的键,确定要创建其实例的Java类,然后将映射传递给该类的构造器,该构造器填充成员。

不需要JSON和Jackson。

09-26 11:06