0

我收到来自第三方服务的回复,如下所示:

{
    "field1": "string",
    "field2": "string",
    "objectList": [
        {
            "object1": {
                "field11": "string",
                "field12": "string",
                "field13": "string",
                "field14": "string",
            },
            "object2": {
                "field21": "string",
                "field22": "string",
                "field23": "string",
            },
            "object3": {
                "field31": "string",
                "field32": "string",
                "field33": "string",
                "field34": "string",
                "field35": "string",
            }
        }
    ]
}

object1,object2和object3不是同一个类型,我只想从响应中获取object2。

我试过这种方法:

ResponseEntity<ResponseClass> response = restTemplate.exchange( uri, HttpMethod.POST, entity, ResponseClass.class );

ResponseClass 看起来像这样:

@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class ResponseClass implements Serializable {

    private static final long serialVersionUID = -4355652702566088304L;

    @JsonProperty("field1")
    private String field1;
    @JsonProperty("field2")
    private String field2;
    @JsonProperty("objectList")
    private List objectList;

我得到了完整的 objectList,所以我可以将它提取为 key value 对,如 objectList.get(0).get("object2") 或类似的东西。但我不确定是否有更好的解决方案。

任何人都可以就如何改进这一点或如何获得我想要的对象提供一些指导吗?

4

2 回答 2

2

有两种方法可以查看它。

可扩展性和纯面向对象的方式:

您需要在您身边正确地映射整个响应对象,而不是有一个模棱两可的列表。数组应始终具有相同类型的对象。在您的示例中,基本上您也有一个包含 object1、object2 和 object3 的包装器对象列表。

所以,基本上你应该做这样的事情:

@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class ResponseClass implements Serializable {

    private static final long serialVersionUID = -4355652702566088304L;

    @JsonProperty("field1")
    private String field1;
    @JsonProperty("field2")
    private String field2;
    @JsonProperty("objectList")
    private List<IntendedObject> objectList;
 }


@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class IntendedObject {
    @JsonProperty("object2")
    private Object2 object2;
 }

另一种方法是将响应放在 JsonNode 中,然后如果您不想将其映射到自定义对象,则对其执行 getProperty() 。

于 2020-08-23T08:59:49.350 回答
0

objectList[0].object2

0 给你列表中的第一项然后 object2 访问字典的值

于 2020-08-23T04:26:44.647 回答