在SpringBoot应用程序中获取从JSON生成的访问令牌

时间:2020-07-31 07:50:25

标签: json spring spring-boot

   @RequestMapping(value = "/check", method = RequestMethod.GET)
   public ResponseEntity<Product> createProducts() throws JsonProcessingException {
      
       String reqUrl = "http://localhost:8080/home";
       HttpHeaders headers = new HttpHeaders();
       headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
       headers.setContentType(MediaType.APPLICATION_JSON);
       Map<String, String> bodyParamMap = new HashMap<String, String>();

    bodyParamMap.put("grant_type", "K1");
    bodyParamMap.put("client_id", "K2");
    bodyParamMap.put("client_secret", "sjxjkdcnjkk");
    
    String reqBodyData = new ObjectMapper().writeValueAsString(bodyParamMap);
    HttpEntity<String> requestEnty = new  HttpEntity<>(reqBodyData, headers);
    ResponseEntity<Product> result = restTemplate.postForEntity(reqUrl, requestEnty, Product.class);
    return result;
}

我正在收集一个具有我想获取的access_token的JSON响应形式result。 我尝试使用JSONObject,但无法正常工作。如何获取 access_token

的值
 JSONObject jsonObject = JSONObject.fromObject(result.toString());
 String m = jsonObject.get("access_token").toString();

我尝试使用它,但是它显示了编译时错误

我的输出被接受为

{"access_token":"ghdjhdjhhh","expires_in":2300}

我想获取此access_token

1 个答案:

答案 0 :(得分:1)

当您使用postForEntity时,假设您的Product.class表示结果(responseType),因此,如果您的转换器定义良好(通常,Spring Boot默认转换器足以用于json),则您的Product类看起来像这样

public class Product {


    @JsonProperty("access_token")
    private String accessToken;

    @JsonProperty("expires_in")
    private Long expiresIn;

    public String getAccessToken() {
        return accessToken;
    }

    public Long getExpiresIn() {
        return expiresIn;
    }

    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }

    public void setExpiresIn(Long expiresIn) {
        this.expiresIn = expiresIn;
    }

}

那么您可以得到这样的结果

ResponseEntity<Product> result = restTemplate.postForEntity(reqUrl, requestEnty, Product.class);
Product product = result.getBody();
String token  = product.getAccessToken()
相关问题