具有公共字段的不同 api 的 POJO 声明
Posted
技术标签:
【中文标题】具有公共字段的不同 api 的 POJO 声明【英文标题】:POJOs declaration for different api with common fields 【发布时间】: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"
。
【问题讨论】:
【参考方案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;
【讨论】:
我将如何告诉杰克逊映射器对象的定义?以上是关于具有公共字段的不同 api 的 POJO 声明的主要内容,如果未能解决你的问题,请参考以下文章
对于控制器中的某些用户,公共字段是不是具有不同的值? [复制]