我创建了一个简单的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。