我想将404响应的html错误页面覆盖为JSON响应。当我使用@ControllerAdvice
而没有@EnableWebMvc
时,它无效。
@EnableWebMvc // if i remove this, it is not working
@ControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class GlobalControllerExceptionHandler {
@ExceptionHandler(NoHandlerFoundException.class)
public ResponseEntity<ZeusErrorDTO> noHandlerFoundException(
HttpServletRequest request,
NoHandlerFoundException exception) {
ErrorDTO errorDTO = new ErrorDTO();
return new ResponseEntity<>(errorDTO, HttpStatus.NOT_FOUND);
}
}
是否有一个没有@EnableWebMvc
的自定义异常处理选项,因为它会覆盖在application.yml中声明的Spring配置。
答案 0 :(得分:2)
我通过在application.yml中添加一个配置轻松解决了问题。
spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false
或
spring.mvc.throw-exception-if-no-handler-found=true
spring.mvc.static-path-pattern: /static
如果您不限制Spring并且没有处理程序与您的请求匹配,那么spring会尝试查找静态内容。
答案 1 :(得分:1)
这种情况正在发生,因为使用@EnableWebMvc
禁用MVC自动配置并要求您提供您想要的内容。看看这个link
您可以使用其他方法自定义配置,例如@Configuration
请参阅Boot的 WebMvcAutoConfiguration 以查找默认设置,并复制所需的部分。
此链接也可能对您有所帮助 - &gt; LINK
当您想要自定义bean时,您应该怎么做?像往常一样,扩展WebMvcConfigurerAdapter(使用@Component注释新类)并进行自定义。
所以,特定问题的底线:不要使用@EnableWebMvc Spring Boot,只包括spring-web作为maven / gradle依赖项 它将被自动配置。
stackoverflow上的这个答案显示了如何执行此操作..请检查此LINK3
答案 2 :(得分:0)
通常情况下,@ utkusonmez答案可以正常工作,但在我看来,这不是很好,因为我正在使用招摇。所以我要做的就是在application.yml
文件中添加以下属性
application.properties
现在spring.mvc.throw-exception-if-no-handler-found=true
spring.mvc.static-path-pattern=/swagger*
和NoHandlerFoundException
都可以正常工作。