我创建了一个简单的 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 字符串,然后由 RequestDTO 类使用 readValue
使用。
问题:我有多个 RequestDTO 类(POJO)并且我想使用相同的 ObjectMapper(如上所述)。我希望该映射器解析要映射到的 POJO 类,而无需我为每个类显式编写它,例如:
//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 类,或者是否有更好的方法来唯一标识哪个类用于映射。
最佳答案
我尝试过这个,它似乎工作正常。更多详情可以查看https://www.tabnine.com/code/java/methods/com.fasterxml.jackson.databind.ObjectMapper/getTypeFactory?snippet=5ce6b2a237d9ff0004dd4adf .
public static <T> T deserializeObject(String json, Class<T> cls) {
T result = null;
JavaType javaType = objectMapper.getTypeFactory().constructType(cls);
try {
result = objectMapper.readValue(json, javaType);
} catch (IOException e) {
log.error("An error occurred during object deserialization", e);
}
return result;
}
关于java - 创建通用的 ObjectMapper 方法以跨多个 POJO 类进行反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61229251/