我已经尝试禁用 Spring 启动的默认错误处理 w/c 抛出
{ "时间戳":1575346220347, "状态":500, "错误": "内部服务器错误", "exception": "org.springframework.web.client.HttpClientErrorException", "消息": "401 未经授权", "path": "/auth/login" }
通过添加 ff. 配置。
@SpringBootApplication(exclude = ErrorMvcAutoConfiguration.class)
和
spring.autoconfigure.exclude: org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
但是我得到了一堆HTML格式的响应,而不是它应该从服务器获得的JSON响应。
可以使用控制器建议创建全局异常处理程序。在 ControllerAdvice 类中,可以使用@ExceptionHandler注释来处理异常。这是一篇关于ControllerAdvice的好文章。https://medium.com/@jovannypcg/understanding-springs-controlleradvice-cd96a364033f
我无法禁用 SpringBoots 自动处理错误响应,但是我能够通过将我的 Rest 模板请求包装在 try catch 中使用 rest 模板中的库来获得正确的 JSON 错误响应,因为事实证明 Rest 模板中存在一个错误,不允许我检索响应正文。
从
private final RestTemplate restTemplate = new RestTemplate();
自
private final RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
尝试捕获包装
ResponseEntity resp = null;
try{
resp = restTemplate.postForEntity(hostUrl+loginUrl, request,Object.class);
}catch(HttpClientErrorException e) {
ErrorDto result = new ObjectMapper().readValue(e.getResponseBodyAsString(), ErrorDto.class);
return new ResponseEntity<>(result, e.getStatusCode());
}
错误Dto.java
@JsonIgnoreProperties(ignoreUnknown = true)
public class ErrorDto {
@JsonProperty("Message")
private String message;
@JsonProperty("Reason")
private String reason;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
}