Spring rest模板获取实体给出400错误

时间:2016-05-04 11:13:40

标签: java spring spring-rest

我收到以下异常org.springframework.web.client.HttpClientErrorException: 400 Bad Request

在此声明中final ResponseEntity<String> entity = restTemplate.getForEntity("http://localhost:12001/api/profiles/bymsisdn/0747894146", String.class);

但是我的回复成功了 curl url -X GET“http://localhost:8001/api/profiles/bymsisdn/0747894146

额外说明: resttemplate = new RestTemplate(); // No Headers or extra convertors added as I think it's not required because using curl works fine

3 个答案:

答案 0 :(得分:1)

您可以使用requestbin来测试您的http客户端的执行情况。

我认为RestTemplate正在为您的服务器响应400 Accept标头。所以您可能需要编辑您的请求标头:

RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
restTemplate.exchange("http://localhost:12001/api/profiles/bymsisdn/0747894146", HttpMethod.GET, entity, String.class);

请注意,这是一个尝试性的解决方案,适应您的服务器。

答案 1 :(得分:0)

curl在未指定时使用 / 作为Accept标头。如果您没有指定accept标头,则使用RestTemplate,它会尝试为您的响应类型(在您的情况下为String)中找到合适的MIME类型。对于String类,取决于您的配置,可以匹配text / * MIME类型,这些类型可能与目标端点生成的类型不匹配。

尝试使用RestTemplate的交换重载方法明确指定需要处理的内容类型

答案 2 :(得分:-2)

final String uri = http://localhost:8088/myapp/ {data}“;

RestTemplate restTemplate = new RestTemplate();

MyResponse result = restTemplate.getForObject(uri,MyResponse.class,valData);