错误信息
406 Not Acceptable: [<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=... (741 bytes)]
org.springframework.web.client.HttpClientErrorException$NotAcceptable: 406 Not Acceptable: [<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=... (741 bytes)]
at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:121)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:186)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:125)
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:818)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:776)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:710)
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:467)原因
406 Not Acceptable是一个HTTP响应状态码,指示服务器无法实现客户端的一个 Accept-标头的请求响应。这通常是用户代理(即浏览器)指定一个可接受的字符集(通过Accept-Charset)、语言(通过Accept-Language)等应响应的结果,并且服务器无法提供此类响应
406 Not Acceptable 表示用户代理(在大多数情况下是 Web 浏览器)请求了有效的资源,但请求包含一个特殊的 Accept- 标头,该标头向服务器指示有效响应只能包含特定类型的信息
出现代码
XxxxDTO dto = XxxxDTO.builder().eauth("xx").username("xx").password("xx").build();
ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(loginUrl, dto, JSONObject.class);综合结论
就是查询客户端和服务器的header信息不一致。
解决方案
restTemplate时设置header。
XxxxDTO dto = XxxxDTO.builder().eauth("xx").username("xx").password("xx").build();
# ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(loginUrl, dto, JSONObject.class);
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType(ContentType.APPLICATION_JSON.getMimeType());
headers.setContentType(type);
org.springframework.http.HttpEntity<XxxxDTO> entity = new org.springframework.http.HttpEntity<>(dto, headers);
ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(loginUrl, entity, JSONObject.class);End