如何禁用 Spring 启动默认错误处理?



我已经尝试禁用 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;
}
}

最新更新