RESOLVE
在rest api应用程序中,异常处理方法的返回类型应为ResponseEntity
或使用@ResponseBody
注释方法,以便spring boot可以执行http序列化。
更新
入门级:
@SpringBootApplication
@ComponentScan
@EnableAutoConfiguration
@EnableConfigurationProperties
@EnableTransactionManagement//TODO remove this line if not needed
public class Application extends SpringBootServletInitializer{
private static Class<Application> applicationClass= Application.class;
public static void main(String[] args) {
SpringApplication.run(applicationClass, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(applicationClass);
}
}
我正在使用@ControllerAdvice
来处理spring boot starter web中的全局异常处理,我遇到了一个奇怪的问题。
当我按照春季官方文档https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc的指南,全局处理异常时,只需添加一个带有@ControllerAdivce
注释的处理程序类。但是,当我测试它时,抛出RunTimeException
时不会调用异常处理方法。
这是我的代码:
@ControllerAdvice
public class GlobalDefaultExceptionHandler {
@ExceptionHandler(value = RuntimeException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public RestEntity handleException(HttpServletRequest req, RuntimeException ex) {
RestEntity restEntity=new RestEntity();
Message message=new Message();
message.setCode(1000);
message.setMessage("Something wrong with the server");
restEntity.setMessage(message);
return restEntity;
}
}
我在其他控制器中使用@ExceptionHandler
注释的方法来处理每个Controller中的特定异常,同时为GlobalDefaultExceptionHandler
留下未解决的异常。
事实证明它不起作用。我在这里错过了什么吗?
目前,作为一种解决方法,我只需在@RestControoler
上添加GlobalDefaultExceptionHandler
,它就可以了。我不知道为什么......
任何人都可以提供帮助吗?
答案 0 :(得分:0)
我实际上必须从主应用程序文件中删除@EnableWebMvc。
这是我的工作配置:
@SpringBootApplication
@ComponentScan(basePackages = {
....
})
public class Application extends SpringBootServletInitializer { ... }
和ControllerAdvice:
@ControllerAdvice
public class ErrorHandlingController { ... }