Java Spring引导Rest-如何配置404-未找到资源
我有一个工作的弹簧靴休息服务。当路径错误时,它不会返回任何内容。完全没有反应。同时,它也不会抛出错误。理想情况下,我期望出现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>
@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);
}
}