Spring Boot禁用/错误映射

pti*_*son 18 java spring spring-mvc spring-boot

我正在使用Spring Boot创建API,因此希望禁用/error映射.

我在application.properties中设置了以下道具:

server.error.whitelabel.enabled=false
spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false
Run Code Online (Sandbox Code Playgroud)

但是,当我点击时,/error我得到:

HTTP/1.1 500 Internal Server Error
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 03 Aug 2016 15:15:31 GMT
Connection: close

{"timestamp":1470237331487,"status":999,"error":"None","message":"No message available"}
Run Code Online (Sandbox Code Playgroud)

要求的结果

HTTP/1.1 404 Internal Server Error
Server: Apache-Coyote/1.1
Run Code Online (Sandbox Code Playgroud)

ale*_*xbt 35

您可以禁用ErrorMvcAutoConfiguration:

@SpringBootApplication
@EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class})
public class SpringBootLauncher {
Run Code Online (Sandbox Code Playgroud)

或者通过Spring Boot的application.yml/properties:

spring.autoconfigure.exclude: org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
Run Code Online (Sandbox Code Playgroud)

如果这不适合您,您也可以使用自己的实现扩展Spring的ErrorController:

@RestController
public class MyErrorController implements ErrorController {

    private static final String ERROR_MAPPING = "/error";

    @RequestMapping(value = ERROR_MAPPING)
    public ResponseEntity<String> error() {
        return new ResponseEntity<String>(HttpStatus.NOT_FOUND);
    }

    @Override
    public String getErrorPath() {
        return ERROR_MAPPING;
    }
Run Code Online (Sandbox Code Playgroud)

  • 请注意,当排除 `ErrorMvcAutoConfiguration` 时,正如文档所说,您将排除特定的自动配置类,这样它们将*永远*不会被应用。强调***从不***!这意味着,无论您是否有自定义的 `ErrorController` 实现,**它将被完全忽略**,并且 Spring 被迫以其内置方式返回错误,可能包括敏感的实现细节。例如,当从外部访问 `/error` 资源时,响应包括一个循环视图路径错误及其整个 Java 堆栈跟踪。 (3认同)
  • 是的,我做了这件事,这只是烦人的!不知道有没有办法在不这样做的情况下删除绑定 (2认同)

小智 5

属性应通过@SpringBootApplication 指定。Kotlin 中的示例:

@SpringBootApplication(exclude = [ErrorMvcAutoConfiguration::class])
class SpringBootLauncher {
Run Code Online (Sandbox Code Playgroud)