首页 > 解决方案 > 如何抑制 Spring Boot 错误消息

问题描述

团队,

Spring boot 抛出错误响应 405(正确响应),但由于安全原因,错误消息应该被抑制,没有路径消息。

{
"timestamp": 1554394589310,
"status": 405,
"error": "Method Not Allowed",
"exception": 
"org.springframework.web.HttpRequestMethodNotSupportedException",
"message": "Request method 'POST' not supported",
"path": "/testproject/datasets12/"
}

通过返回没有路径消息的响应来帮助我解决问题。

标签: spring-boot

解决方案


正如 Shaunak Patel 所指出的,处理此问题的方法是自定义错误处理程序。有很多方法可以实现一个,但是一个简单的实现让你得到你想要的结果是这样的

@RestControllerAdvice
public class ControllerAdvice {

    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
    public Map<String, Object> handleConstraintViolationException(HttpRequestMethodNotSupportedException ex) {
        Map<String, Object> response = new HashMap<>();
        response.put("timestamp", Instant.now().toEpochMilli());
        response.put("status", HttpStatus.METHOD_NOT_ALLOWED.value());
        response.put("error", HttpStatus.METHOD_NOT_ALLOWED.getReasonPhrase());
        response.put("exception", ex.getClass().getName());
        response.put("message", String.format("Request method '%s' not supported", ex.getMethod()));
        return response;
    }
}

一个curl命令来说明

$ curl -v -X POST 'localhost:8080/testproject/datasets12/'
{
  "exception": "org.springframework.web.HttpRequestMethodNotSupportedException",
  "error": "Method Not Allowed",
  "message": "Request method 'POST' not supported",
  "timestamp": 1554400755087,
  "status": 405
}

推荐阅读