【问题标题】:POJOs declaration for different api with common fields具有公共字段的不同 api 的 POJO 声明
【发布时间】:2021-09-05 09:38:08
【问题描述】:

我需要为我必须在我的微服务中调用的几个 API 创建响应 POJO 类。响应具有下面给出的基本结构。

{
    "requestId": "abcd-1234-3456",
    "sourceSystem": "HOME",
    "response": {
        "statusCode": "200",
        "statusMessage": "Successfully Received",
        "statusType": "SUCCESS",
        "details": [
            {
             "message" : "hi"
            }
        ]
    }
}

这里的“details”属性数组中的对象可以变化并且可以有不同的类定义。有人可以帮助我是否应该如何声明我的 POJO,以便公共字段有一个公共类,而详细信息属性中的对象有一组不同的类。我尝试了几种使用 java 泛型和 @JsonSubType 的方法,但在反序列化过程中出现了一些错误 Unrecognized field "details"

【问题讨论】:

    标签: java spring spring-boot jackson deserialization


    【解决方案1】:

    对于给定的 json,您应该创建两个带有这些字段的 pojo,如下所示

    Class UserResponse{
        private String requestId,
        private String sourceSystem,
        private Response  response;
    
       //getter 
       //setter
    }
    

    现在创建内部 pojo 响应为

    class Response{
     private String requestId;
     private String statusMessage;
     private String statusType;
     private List<Object> details;
       //getter 
       //setter
     }
    

    如果您是 json 对象解析的新手,那么您可以使用 Gson 库。您需要先创建 Gson 对象,然后使用 fromJson() 方法作为

    Gson gson = new Gson();
    
    UserResponse userResponse = gson.fromJson(json, UserResponse.class);
    

    来源:How to convert JSON to Java Object

    【讨论】:

    • 我将如何告诉杰克逊映射器对象的定义?
    • @AnkitSinha 和大家分享了如何使用 gson 从 json 创建 pojo
    【解决方案2】:

    您为什么不尝试将其定义为对象:-

    class Response{
     private String requestId;
     private String statusMessage;
     private String statusType;
     private List<Object> details;
     }
    

    【讨论】:

    • 我将如何告诉杰克逊映射器对象的定义?
    猜你喜欢
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    相关资源
    最近更新 更多