如何为mediatypes rest端点调用resttemplate.getforobject

tkqqtvp1  于 2021-06-26  发布在  Java
关注(0)|答案(2)|浏览(291)

我有这样一个java端点

@RequestMapping(method = RequestMethod.GET, value = "/{test}", produces = "application/app+json;version=1")
public ResponseEntity<List<Entity>> getEntity(@PathVariable Long test) {

        return ........
    }

现在我通过uribuilder使用restempate调用这个rest端点

String url = UriComponentsBuilder.fromHttpUrl(this.URL)
                .path(API_URL)
                .path("/{test}")
                .buildAndExpand(test).toString(); //How to add Headers??

 return Arrays.asList(restTemplate.getForObject(url, Entity[].class));

我试图在rest端点调用上添加头,但不确定添加头的位置是否正确。或者还有其他正确的方法吗?请建议

vu8f3i0k

vu8f3i0k1#

RestTemplate.getForObject() 方法不支持设置标头。解决方法是使用 RestTemplate.exchange() 方法。
您可以添加标题:

String url = UriComponentsBuilder.fromHttpUrl(this.URL)
                .path(API_URL)
                .path("/{test}")
                .buildAndExpand(test).toString();

HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set("header-key", "header-value");
...

HttpEntity<String> httpEntity = new HttpEntity<>(null, httpHeaders);

ResponseEntity<Entity[]> response = restTemplate.exchange(
    url, HttpMethod.GET, httpEntity, Entity[].class);

return Arrays.asList(response);
twh00eeo

twh00eeo2#

通过调用 getForObject 方法。相反,您可以使用 exchange 方法。
代码如下:

HttpHeaders headers = new HttpHeaders();
headers.add("HEADER", "VALUE");

HttpEntity<String> entity = new HttpEntity<>(null, headers);

restTemplate.exchange(url, HttpMethod.GET, entity, Entity[].class);

相关问题