gitlabapi下载文件+restemplate

t3psigkw  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(546)

请帮助解决以下问题。
当我试着和 Postman 一起请求gitlab或者curl时,我得到了文件的答案

curl --header "PRIVATE-TOKEN: xxxxxxxx" "https://gitlabXXXX/api/v4/projects/13/repository/files/src%2Fcom%2Fgre%2Fjenkins%2FConstants.groovy?ref=foo"

但是,当我尝试在代码中执行相同的操作时,我得到一个错误消息:“404文件未找到”

HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.set("PRIVATE-TOKEN", "xxxxxxx");
    System.out.println(restTemplate.exchange("https://gitlabXXXX/api/v4/projects/13/repository/files/src%2Fcom%2Fgre%2Fjenkins%2FConstants.groovy?ref=foo", HttpMethod.GET, new HttpEntity<>(httpHeaders), String.class).getBody());

为什么不起作用?也许restempate中的某些内容更改了url或者我不知道。。。

ifsvaxew

ifsvaxew1#

resttemplate再次对您的url进行编码,因此您的请求url为: https://gitlabXXXX/api/v4/projects/13/repository/files/src%252Fcom%252Fgre%252Fjenkins%252FConstants.groovy?ref=foo 所以你的 % 变成 %25 这不是gitlabapi所期待的。

解决方案

你可以用 UriComponentsBuilder.build(true) 方法来告诉您的uri已编码:

String gitlabUriString = "https://gitlabXXXX/api/v4/projects/13/repository/files/src%2Fcom%2Fgre%2Fjenkins%2FConstants.groovy?ref=foo";

// true in build(true) tells parameters are already encoded
URI gitlabUri = UriComponentsBuilder.fromHttpUrl(gitlabUriString)
    .build(true).toUri();

System.out.println(restTemplate.exchange(gitlabUri, HttpMethod.GET, new HttpEntity<>(httpHeaders), String.class).getBody());

相关问题