它已经困扰了两天已经是一个看似超级简单的问题:GET请求JSON
我做的application/json
使用RestTemplate简单的GET请求,但一直收到
org.springframework.web.client.HttpClientErrorException: 400 Bad Request
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:636)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:592)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:552)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:470)
我做了研究并遵循了这个tutorial,我也查看了这个POST request via RestTemplate in JSON的解决方案。但他们没有帮助,这是我的代码:
RestTemplate restTemplate = new RestTemplate();
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);
restTemplate.exchange(endpoint, HttpMethod.GET, requestEntity, String.class);
endpoint
是http://localhost:8080/api/v1/items?itemIds=" + URLEncoder.encode(itemIds, "UTF-8")
这邮差工作正常。 itemIds
是一个逗号分隔的列表如下图所示:
5400028914,5400029138,5400029138,5400029138,5400029138,5400028401,5400028918,5400028076,5400028726
我还试图用getForObject
象下面这样:
String result = restTemplate.getForObject(endpoint, String.class);
这给了我这个错误:
org.springframework.web.client.HttpClientErrorException: 415 Unsupported Media Type
我我不知道我错过了什么,或者错了什么,但是同样的终结点在Postman上完美工作,但是唯一的差异erence是我在Postman应用程序中添加了Content-Type标头。
这是邮差我的要求:
GET /api/v1/items?itemIds=abc%2cdef%2cghi HTTP/1.1 Host: localhost:8080 Connection: keep-alive Postman-Token: 84790e06-86aa-fa8a-1047-238d6c931a68 Cache-Control: no-cache User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 Content-Type: application/json Accept: */* Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4
所以,我怎么能正确设置使用RestTemplate如果我上面的代码是错误的内容类型?
另一个深潜,我已经解雇了Wireshark捕捉到两个HTTP请求,下面是截图:
我仍然不明白为什么从我的Java程序中抛出400,而从邮差的工作正常。
非常感谢。
你试过getForObject()和getForEntity()吗?他们可能比exchange更好()。 –
转储您通过邮递员发送的请求并将其发布到此处。 –
但是,为什么你使用GET请求的内容类型?内容类型是“请求主体的MIME类型(与POST和PUT请求一起使用)”。 https://en.wikipedia.org/wiki/List_of_HTTP_header_fields –