json文本怎么转DTO

将JSON文本转换为DTO(Data Transfer Object)通常涉及以下几个步骤:

  1. 定义DTO类:首先,根据JSON结构定义相应的Java类,这些类应包含与JSON字段对应的属性和相应的getter和setter方法。

  2. 使用JSON处理库:使用如Jackson或Gson等JSON处理库来解析JSON文本并将其映射到DTO对象。

  3. 处理嵌套对象和数组:如果JSON中包含嵌套对象或数组,需要在DTO类中定义相应的嵌套类或集合类型。

  4. 考虑日期和时间格式 :如果JSON中包含日期和时间,需要确保DTO类中的相应字段类型为LocalDateTimeLocalDateOffsetDateTime等,并使用适当的格式注解。

  5. 处理可选字段和空值 :使用@Nullable注解或Java 8的Optional类来处理可能为null的字段。

示例

假设有以下JSON文本:

json 复制代码
{
  "id": "310970",
  "name": "营销系统人力资源部",
  "parentId": "311088",
  "departmentLevel": "50",
  "idPath": "/200000/311088/310970/",
  "namePath": "/xxx/人力资源系统/营销系统人力资源部/",
  "levelPath": "/10/30/50/",
  "status": "0",
  "departmentDesc": "L3",
  "departmentCreatedAt": 1527782400000,
  "effectiveDateTime": 1527782400000,
  "leader": "80036462",
  "channel": "CORE_HR",
  "updatedAt": 1692675765000,
  "isEntity": "Y",
  "deptType": "1",
  "setId": "xxx",
  "departmentSeq": "520",
  "nameEn": "NONE(invalid)",
  "nameEnPath": "/xxx/HR System/NONE(invalid)/",
  "departmentDescEn": "",
  "isModel": "",
  "locations": [
    {
      "deptId": "310970",
      "countryCode": "CHN",
      "countryDesc": "中国",
      "countryDescEn": "China",
      "cityCode": "440300",
      "cityDesc": "深圳市",
      "cityDescEn": "",
      "updatedAt": 1672141857000
    }
  ],
  "departmentCreatedAtStr": "2018-06-01 00:00:00",
  "effectiveDateTimeStr": "2018-06-01 00:00:00",
  "updatedAtStr": "2023-08-22 11:42:45"
}

定义DTO类

java 复制代码
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.LocalDateTime;
import java.util.List;

public class DepartmentInfoDTO {
    private String id;
    private String name;
    private String parentId;
    private String departmentLevel;
    private String idPath;
    private String namePath;
    private String levelPath;
    private String status;
    private String departmentDesc;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime departmentCreatedAt;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime effectiveDateTime;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updatedAt;
    private String leader;
    private String channel;
    private String isEntity;
    private String deptType;
    private String setId;
    private String departmentSeq;
    private String nameEn;
    private String nameEnPath;
    private String departmentDescEn;
    private String isModel;
    private List<LocationDTO> locations;
    private String departmentCreatedAtStr;
    private String effectiveDateTimeStr;
    private String updatedAtStr;

    // Getters and setters
}

public static class LocationDTO {
    private String deptId;
    private String countryCode;
    private String countryDesc;
    private String countryDescEn;
    private String cityCode;
    private String cityDesc;
    private String cityDescEn;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updatedAt;

    // Getters and setters
}

使用Jackson解析JSON

java 复制代码
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonToDtoConverter {
    public static void main(String[] args) {
        String jsonText = "{\"id\":\"310970\",\"name\":\"营销系统人力资源部(失效)\",...}"; // 完整的JSON文本

        ObjectMapper objectMapper = new ObjectMapper();
        try {
            DepartmentInfoDTO departmentInfo = objectMapper.readValue(jsonText, DepartmentInfoDTO.class);
            // 现在 departmentInfo 对象包含了JSON数据
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

确保处理任何可能的异常,并根据需要调整DTO类和解析逻辑。如果JSON结构非常复杂或经常变化,考虑使用更灵活的解析策略,例如使用@JsonAnySetter注解或自定义反序列化逻辑。

相关推荐
2401_894915531 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
Java牛马5 小时前
SpringBoot Starter 依赖相关总结
java·spring·springboot·starter·自动装配·依赖
吴声子夜歌5 小时前
Java面试——Spring Cloud原理及应用(二)
java·spring cloud·面试
东小西6 小时前
【SAA实战】第 1 篇:ReactAgent 入门——先撸个"会调工具的助手"跑起来
java·人工智能·spring
mqiqe7 小时前
AgentScope Java 2.0 协议集成全景解析:A2A、AG-UI、Agent Protocol 三大开放协议实战指南
java·开发语言·ui
脉动数据行情7 小时前
Java 实现台股 TWSE/TPEx 行情采集(个股 + K 线)
java·开发语言·twse·tpex·台股
月华路9 小时前
G1 GC 对数组与大对象(Humongous)的处理
java·jvm·算法
liangshanbo121510 小时前
虚拟列表深度面试题整理
java·开发语言·前端
gugucoding10 小时前
59. 【Java】Spring Boot 入门:第一个 Web 应用
java·开发语言·spring boot
10mAh11 小时前
【Java】HashMap 的 put 到底做了什么?——冲突、扩容与树化实测
java·开发语言·hash