Spring RestTemplate getForObject获得404

时间:2017-08-08 14:16:18

标签: java spring rest http

我正在尝试向Api Rest提出请求,但我总是得到404,但是如果尝试在浏览器中复制queryUrl或者postMan它可以正常工作。

restTemplate.getForObject(queryUrl, entity ,Integer.class);

我也试过这个:

HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity entity = new HttpEntity(httpHeaders);
log.debug("request headers: " + entity.getHeaders());
ResponseEntity response = restTemplate.exchange(queryUrl, 
HttpMethod.GET, entity, String.class);

但没有任何改变。 任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

你是正确的Barath使用是正确的。问题是UriComponentBuilder在URL的en中包含一个空格。

我修剪了它。

String queryUrl = UriComponentsBuilder.fromUriString(HOST)
                .path(PATH)
                .buildAndExpand(param)
                .toUriString().trim();

答案 1 :(得分:0)

这花了我一些时间来弄清楚,所以我会在这里留下一点笔记,希望有一天能对某人有所帮助。 使用ResTemplate.getForEntity(URL,Type)进行获取请求时,我一直收到404。该网址可以在Postman的Chrome浏览器中使用,但不能在我的代码中使用。 最终是因为我的URL中有一个unsafe character,确切的说是%,因为我的URL中有空格,所以URL而不是空格中有%20。 Postman和Chrome可以处理此问题,但不能处理我的代码。一旦我用实际空间替换了不安全的字符,一切都很好。

希望它也对您有用。

答案 2 :(得分:0)

当你的 url 包含 "%" 时,你应该使用 restTemplate.getForObject(new URI(url),xx.class),它对我有用。

相关问题