java - 创建通用的 ObjectMapper 方法以跨多个 POJO 类进行反序列化

标签 java jackson objectmapper

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

相关文章:

java - 反序列化 jackson 中的对象引用

java - 从 json 响应转换为对象时,ObjectMapper 获得额外空间

ios - 枚举元素不能作为实例成员引用

java - 在 Java 中连续计算字符

java - 整数边界和一些 if else 的问题

java - 将 POJO 序列化为 json,并将某些值作为字符串或列表

java - Jackson:反序列化接口(interface)集的实例化子类(yml)

java - 避免使用 CountDownLatch 在发送回调之前等待许多线程

java - 使用 CDI 注入(inject)接口(interface)实现

json - 使用 Kotlin 数据类在 Jackson 中区分 null 和缺失的属性