使用 Rest Template 交换方法将 Json 映射到 POJO 类

Posted

技术标签:

【中文标题】使用 Rest Template 交换方法将 Json 映射到 POJO 类【英文标题】:Map Json to POJO class using Rest Template exchange method 【发布时间】:2019-11-03 07:34:41 【问题描述】:

这是我对 API 的 POST 请求

ResponseEntity<String> result = rt.exchange(url, HttpMethod.POST, httpEntity, String.class);

我得到的回应如下


    "headers": 
        "Cache-Control": [
            "no-store"
        ],
        "Content-Type": [
            "application/json;charset=UTF-8"
        ],
        "Date": [
            "Thu, 20 Jun 2019 12:50:08 GMT"
        ],
        "Pragma": [
            "no-cache"
        ],
        "Server": [
            "val"
        ],
        "X-Content-Type-Options": [
            "nosniff"
        ],
        "X-Frame-Options": [
            "DENY"
        ],
        "X-Xss-Protection": [
            "1; mode=block"
        ],
        "Content-Length": [
            "331"
        ]
    ,
    "body": 
        "access_token": "token_value,
        "scope": "KYC",
        "token_type": "bearer",
        "expires_in": 49900,
        "jti": "jti_val"
    ,
    "statusCode": "OK",
    "statusCodeValue": 200

我需要提取 access_token,scope,token_type,statusCodeValue

那么我的 POJO 类的结构应该是什么来映射响应?或者我如何从 JSON 中获取这些字段的值?

ResponseEntity<PojoClass> result = rt.exchange(url, HttpMethod.POST, httpEntity, PojoClass.class);

【问题讨论】:

【参考方案1】:

Body 可以通过上面发布的 sn-p 并且可以使用“response.getStatus()”检索状态码

【讨论】:

【参考方案2】:

试试这个:更新

 ResponseEntity<Response> response = rt.exchange(url, HttpMethod.POST, httpEntity, Response.class);

类定义:

身体等级:

public class Body implements Serializable
    private String access_token;
    private String scope;
    private String token_type;
    private long expires_in;
    private String jti;

    //standard getters and setters


响应类:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Response implements Serializable
    private String statusCode;
    private int statusCodeValue;
    private Body body;

    //standard getters and setters


现在: 您应该使用它们各自的 getters 方法访问您想要的值。 喜欢:

String token=response.getBody.getAccessToken();
String statusCode= respnse.getStatusCode();

【讨论】:

response.getBody.getAccessToken(); response.getBody 无法访问 getAccessToken(); 字符串令牌=response.getBody().getBody().getAccess_token(); //空指针异常 你的伪代码本身不正确,不能像这样访问token String token=response.getBody.getAccessToken(); 我觉得你在做hit n trial方法 @OracleMonkey,你为什么认为,我的伪代码不正确?这有什么问题:String token=response.getBody.getAccessToken();?您必须为您的类实体生成 getter 和 setter,并使用这些 getter 来访问特定的变量。它可能因名称而异,因为我使用了 getAccessToken 这个。不,它没有命中和试用,建议是根据您提供的代码段提出的。

以上是关于使用 Rest Template 交换方法将 Json 映射到 POJO 类的主要内容,如果未能解决你的问题,请参考以下文章

LinkedIn:将 JSAPI 令牌交换为 REST 的 OAuth 令牌

Rest Template 无法正确解析 json rest api 响应

如何在 Spring Boot 中使用带有 Bearer Token 和 form-data 的 Rest Template 调用 REST Api

JS数组技巧

如何将带有 ES6 Rest 的方法添加到 JS 对象[重复]

如何获取通用地图作为来自 restTemplate 交换方法的响应?