首页 > 解决方案 > 如何使用 RestTemplate 在响应正文(身份验证 Web 服务)中返回令牌?

问题描述

我使用 RestTemplate 调用身份验证的 Web 服务和 POST 用户名和密码,我需要作为回报从响应正文中获取令牌,但我找不到明确的方法来做到这一点..这是我的代码

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type","application/json");
requestHeaders.add("Accept", "application/json");
requestHeaders.add("Authorization", auth_token);
final String url = "http://192.168.1.3:18080/api/authenticate";
RestTemplate restTemplate=new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
map.add("password",password);
map.add("username",username);
HttpEntity<MultiValueMap<String, String>> entity= new HttpEntity<MultiValueMap<String, String>>(map, requestHeaders);
String response = restTemplate.postForObject(url,entity,String.class);
return response;

这是我需要从中获取令牌的响应正文:Web 服务响应正文

标签: androidspring

解决方案


您几乎就在那里,此时您的代码将整个 JSON 响应作为字符串获取:

return restTemplate.postForObject(url,entity,String.class); 
// {"id_token": "blahblahblah"}

相反,您可以转换为 Map 并获取正确的值:

Map<String, Object> response3 = restTemplate.postForObject(url, entity, Map.class);
return response3.get("id_token") 
// blahblahblah

或创建一个类:

public class AuthResponse {

    @JsonProperty( "id_token" )
    private String idToken;

    public String getIdToken() {
        return idToken;
    }

    public void setIdToken(String idToken) {
        this.idToken = idToken;
    }
}

并转换:

AuthResponse response4 = restTemplate.postForObject(url, entity, AuthResponse.class);
return response4.getIdToken();
// blahblahblah

推荐阅读