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

如何禁用Spring boots默认错误处理?,spring,spring-boot,Spring,Spring Boot,我已经尝试过禁用Spring引导w/c抛出的默认错误处理 { “时间戳”:1575346220347, “地位”:500, “错误”:“内部服务器错误”, “异常”:“org.springframework.web.client.HttpClientErrorException”, “消息”:“401未经授权”, “路径”:“/auth/login”} 通过添加ff。配置 @SpringBootApplication(exclude = ErrorMvcAutoConfiguration.

我已经尝试过禁用Spring引导w/c抛出的默认错误处理

{ “时间戳”:1575346220347, “地位”:500, “错误”:“内部服务器错误”, “异常”:“org.springframework.web.client.HttpClientErrorException”, “消息”:“401未经授权”, “路径”:“/auth/login”}

通过添加ff。配置

   @SpringBootApplication(exclude = ErrorMvcAutoConfiguration.class)


但是我得到的是一堆HTML格式的响应,而不是它应该从服务器得到的JSON响应

您可以使用控制器建议生成全局异常处理程序。在ControllerAdvice类中,可以使用@ExceptionHandler注释来处理异常。这是一篇关于ControllerAdvice的好文章

我无法禁用SpringBoots对错误响应的自动处理,但是我可以通过将Rest模板请求包装在一个try-catch中并在Rest模板中使用一个库来获得正确的JSON错误响应,因为Rest模板中有一个bug不允许我检索响应主体

试着抓住包装

 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());
        }
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());
        }
@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;
    }
}