Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 撤销令牌。REST模板使用问题_Java_Spring_Rest_Google Api Client_Spring Rest - Fatal编程技术网

Java 撤销令牌。REST模板使用问题

Java 撤销令牌。REST模板使用问题,java,spring,rest,google-api-client,spring-rest,Java,Spring,Rest,Google Api Client,Spring Rest,我正在尝试撤销以下google令牌(“内容类型:application/x-www-form-urlencoded”,请求类型POST,https://accounts.google.com/o/oauth2/revoke?token={token}) 我的代码示例是: private static final String REVOKE_URL = "https://accounts.google.com/o/oauth2/revoke"; private static final Strin

我正在尝试撤销以下google令牌(
“内容类型:application/x-www-form-urlencoded”
,请求类型
POST
https://accounts.google.com/o/oauth2/revoke?token={token}

我的代码示例是:

private static final String REVOKE_URL = "https://accounts.google.com/o/oauth2/revoke";
private static final String TOKEN = "token";
@Autowired
private RestTemplate restTemplate;

public void revokeToken(TokenDetailsDto tokenDetailsDto) {
    HttpHeaders headers = new HttpHeaders();
    headers.add(CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
    HttpEntity<?> entity = new HttpEntity(headers);
    Map<String, String> parameters = new HashMap<>();
    parameters.put(TOKEN, tokenDetailsDto.getRefreshToken());
    LOGGER.info("used parameters:\n\turl={},\n\tentity={},\n\turiParameters={}", REVOKE_URL, entity, uriParameters);
    restTemplate.exchange(REVOKE_URL, HttpMethod.GET, entity, Void.class, parameters);
}

所以问题在于restTemplate使用(我的spring部件)。有什么想法吗?我做错了什么?

解决方案是:

    HttpHeaders headers = new HttpHeaders();
    headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
    HttpEntity<?> entity = new HttpEntity(headers);
    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(REVOKE_URL)
            .queryParam("token", tokenDetailsDto.getRefreshToken());
    LOGGER.info("used parameters:\n\turl={},\n\tentity={},\n\turiParameters={}", REVOKE_URL, entity);
    restTemplate.postForObject(builder.build().encode().toUri(), entity, Void.class);
HttpHeaders=newhttpheaders();
headers.add(HttpHeaders.CONTENT\u TYPE、MediaType.APPLICATION\u FORM\u URLENCODED\u VALUE);
HttpEntity=新的HttpEntity(标题);
UriComponentsBuilder=UriComponentsBuilder.fromHttpUrl(撤销URL)
.queryParam(“token”,tokenDetailsDto.getRefreshToken());
info(“使用的参数:\n\turl={},\n\tentity={},\n\turiParameters={}”,REVOKE\u URL,entity);
restemplate.postForObject(builder.build().encode().tori(),entity,Void.class);
小说明:服务预期urlParameters,但
参数
不是urlParameters,而是它的请求参数。因此,我使用
UriComponentsBuilder
构建正确的请求

restTemplate.postForEntity(REVOKE_URL, entity, Void.class, uriParameters);
    HttpHeaders headers = new HttpHeaders();
    headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
    HttpEntity<?> entity = new HttpEntity(headers);
    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(REVOKE_URL)
            .queryParam("token", tokenDetailsDto.getRefreshToken());
    LOGGER.info("used parameters:\n\turl={},\n\tentity={},\n\turiParameters={}", REVOKE_URL, entity);
    restTemplate.postForObject(builder.build().encode().toUri(), entity, Void.class);