Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring引导Rest-如何配置404-未找到资源_Java_Spring_Rest_Spring Mvc_Spring Boot - Fatal编程技术网

Java Spring引导Rest-如何配置404-未找到资源

Java Spring引导Rest-如何配置404-未找到资源,java,spring,rest,spring-mvc,spring-boot,Java,Spring,Rest,Spring Mvc,Spring Boot,我有一个工作的弹簧靴休息服务。当路径错误时,它不会返回任何内容。完全没有反应。同时,它也不会抛出错误。理想情况下,我期望出现404未找到错误 我有一个环球漫游者 @ControllerAdvice public class GlobalErrorHandler extends ResponseEntityExceptionHandler { } ResponseEntityExceptionHandler中有此方法 protected ResponseEntity<Object>

我有一个工作的弹簧靴休息服务。当路径错误时,它不会返回任何内容。完全没有反应。同时,它也不会抛出错误。理想情况下,我期望出现404未找到错误

我有一个环球漫游者

@ControllerAdvice
public class GlobalErrorHandler extends ResponseEntityExceptionHandler {

}
ResponseEntityExceptionHandler中有此方法

protected ResponseEntity<Object> handleNoHandlerFoundException(NoHandlerFoundException ex, HttpHeaders headers,
                                                     HttpStatus status, WebRequest request) {

    return handleExceptionInternal(ex, null, headers, status, request);
}

解决方案非常简单:

首先您需要实现将处理所有错误情况的控制器。此控制器必须具有
@ControllerAdvice
——必须定义适用于所有
@RequestMappings
@ExceptionHandler

@ControllerAdvice
public class ExceptionHandlerController {

    @ExceptionHandler(NoHandlerFoundException.class)
    @ResponseStatus(value= HttpStatus.NOT_FOUND)
    @ResponseBody
    public ErrorResponse requestHandlingNoHandlerFound() {
        return new ErrorResponse("custom_404", "message for 404 error code");
    }
}
@ExceptionHandler
中提供要覆盖响应的异常
NoHandlerFoundException
是当Spring无法委托请求时生成的异常(404案例)。您还可以指定
Throwable
来覆盖任何异常

Second您需要告诉Spring在404(无法解析处理程序)的情况下抛出异常:

使用未定义URL时的结果

{
    "errorCode": "custom_404",
    "errorMessage": "message for 404 error code"
}
更新:如果使用
application.properties
配置SpringBoot应用程序,则需要添加以下属性,而不是在main方法中配置
DispatcherServlet
(感谢@mengchengfeng):


我知道这是一个老问题,但这里有另一种方法可以在代码中配置
DispatcherServlet
,而不是在主类中。您可以使用单独的
@配置
类:

@EnableWebMvc
@Configuration
public class ExceptionHandlingConfig {

    @Autowired
    private DispatcherServlet dispatcherServlet;

    @PostConstruct
    private void configureDispatcherServlet() {
        dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
    }
}

请注意,如果没有
@EnableWebMvc
注释,这将无法工作。

谢谢。即使做了这个改变,我仍然没有看到任何反应。请帮忙!!!你能发布你的过滤器实现吗?CorrelationHeaderFilter将处理每个请求,这可能是它不适合您的原因。我使用与您非常接近的代码进行了测试,如果我对过滤器进行注释,添加“@EnableWebMvc”,并对不需要的注释进行注释,如“@EnableSwagger”、“EnableJpaRepositories”、“enableSpectjautoproxy”,它就会正常工作。如果您希望其他人在代码示例中遇到问题,我可以将简单的应用程序发布到github,当我在main中删除dispatcherServlet配置并使用上述两种方法后,使用与main相反的属性来配置dispatcherServlet时,定制ControllerAdvice对我的Spring启动应用程序有效:
Spring.mvc.throw exception if not handler found=true Spring.resources.add mappings=false
application.properties中的属性,错误已正确路由到我的ControllerAdvice。希望这对别人有帮助!这确实有帮助,但取代了spring.resources.add mappings=false,spring boot 2+中的
spring.web.resources.add mappings=false
。谢谢
{
    "errorCode": "custom_404",
    "errorMessage": "message for 404 error code"
}
spring.mvc.throw-exception-if-no-handler-found=true
spring.web.resources.add-mappings=false
@EnableWebMvc
@Configuration
public class ExceptionHandlingConfig {

    @Autowired
    private DispatcherServlet dispatcherServlet;

    @PostConstruct
    private void configureDispatcherServlet() {
        dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
    }
}