response.setStatus(401); response.setHeader("WWW-Authenticate", "Basic realm=\"input username and password\""); return buildResult(request) + "\n>>>illegal user or pwd!"; }
try { // 如果返回状态码不是200,则直接抛异常,无法拿到responseBody RestTemplate restTemplate = new RestTemplate(); HttpEntity<String> ans = restTemplate.getForEntity("http://127.0.0.1:8080/auth?name=一灰灰&age=20", String.class); log.info("exception with no auth res: {}", ans); } catch (Exception e) { log.info("exception with no auth error: {}", e); }
输出如下,走入了catch逻辑,从异常堆栈中,也只能看到401 Unauthorized,拿不到返回的Response body
1 2 3 4 5 6 7 8 9 10 11 12 13
(exception with no auth error: {}
org.springframework.web.client.HttpClientErrorException$Unauthorized: 401 Unauthorized at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:81) at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:123) at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:102) at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:785) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:743) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:677) at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:345) at com.git.hui.boot.resttemplate.rest.RestTemplateDemo.exception(RestTemplateDemo.java:354) ...