SpringMVC 异常处理

r囧r小猫 2022-07-14 05:40 342阅读 0赞

如果在请求处理的时候,出现了异常,那它的输出依然会是Servlet响应。异常必须要以某种方式转换为响应。

Spring提供了多种方式将异常转换为响应:

  1. 特定的Spring异常将会自动映射为指定的HTTP状态码;
  2. 异常上可以添加@ResponseStatus注解,从而将其映射为某一个HTTP状态码;
  3. 在方法上可以添加@ExceptionHandler注解,使其用来处理异常。

为控制器添加通知

控制器通知(Controller advice)是任意带有@ControllerAdvice注解的类,这个类会包含一个或多个如下类型的方法:

@ExceptionHandler注解标注的方法;
@InitBinder注解标注的方法;
@ModelAttribute注解标注的方法;

带有@ControllerAdvice注解的类,会运用到整个应用程序所有控制器中带有@RequestMapping注解的方法上。

@ControllerAdivce最为实用的一个场景就是将所有的@ExceptionHandler方法收集到一个类中,这样所有控制器的异常就能在一个地方进行一致的处理。

AppExceptionHandler.java

  1. @ControllerAdvice
  2. public class AppExceptionHandler {
  3. @ResponseBody
  4. @ExceptionHandler(NotNullException.class)
  5. public Object notNullExceptionHandler(NotNullException notNullException){
  6. ResponseResult responseResult = notNullException.getResponseResult();
  7. return JSON.toJSONString(responseResult);
  8. }
  9. }

HomeController.java

  1. @Controller
  2. public class HomeController {
  3. @RequestMapping(value="/" ,method = RequestMethod.GET)
  4. public String home(){
  5. return "home";
  6. }
  7. @ResponseBody
  8. @RequestMapping(value="/save" ,method = RequestMethod.GET)
  9. public String save(String userId){
  10. if (userId == ""){
  11. throw new NotNullException(new ResponseResult("01", "不能为空"));
  12. }
  13. return "";
  14. }
  15. }

NotNullException.java

  1. public class NotNullException extends RuntimeException{
  2. /** * */
  3. private static final long serialVersionUID = 1L;
  4. private ResponseResult responseResult;
  5. public NotNullException(ResponseResult responseResult){
  6. super();
  7. this.responseResult = responseResult;
  8. }
  9. public ResponseResult getResponseResult() {
  10. return responseResult;
  11. }
  12. public void setResponseResult(ResponseResult responseResult) {
  13. this.responseResult = responseResult;
  14. }
  15. }

ResponseResult.java

  1. public class ResponseResult implements Serializable{
  2. /** * */
  3. private static final long serialVersionUID = 1L;
  4. private String code = "";
  5. private String message = "";
  6. private Object data = "";

WebConfig.java

  1. @Configuration
  2. @EnableWebMvc // 启用SpringMVC
  3. @ComponentScan("com.sosweet") // 启用组件扫描
  4. public class WebConfig extends WebMvcConfigurerAdapter{
  5. /** 视图解析器 */
  6. @Bean
  7. public InternalResourceViewResolver viewResolver(){
  8. InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  9. viewResolver.setPrefix("/WEB-INF/classes/views/"); // 运行时的目录结构
  10. viewResolver.setSuffix(".jsp");
  11. viewResolver.setViewClass(JstlView.class);
  12. return viewResolver;
  13. }
  14. /** 配置静态资源的处理 */
  15. @Override
  16. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer){
  17. configurer.enable();
  18. }
  19. @Override
  20. public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
  21. /** 将StringHttpMessageConverter的默认编码设为UTF-8 避免出现乱码 */
  22. StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
  23. converters.add(stringHttpMessageConverter);
  24. }
  25. }

发表评论

表情:
评论列表 (有 0 条评论,342人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringMVC 异常处理

    如果在请求处理的时候,出现了异常,那它的输出依然会是Servlet响应。异常必须要以某种方式转换为响应。 Spring提供了多种方式将异常转换为响应: 1. 特定的Spr

    相关 SpringMVC处理异常

    Spring提供了多种方式将异常转换为响应:     1.特定的Spring异常将会自动映射为指定的HTTP状态码;     2.异常上可以添加@ResponseSta

    相关 springMVC异常处理

    异常处理思路: 系统中异常包括两种:预期异常和运行时异常RuntimeException.前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异

    相关 SpringMVC异常处理

      在Spring MVC中,所有用于处理在请求映射和请求处理过程中抛出的异常的类,都要实现 HandlerExceptionResolver 接口。 一个基于Spring

    相关 SpringMVC 异常处理

    如果我们的代码出现异常时一般会在页面很生硬的把异常打印出来,一是这样很难看再就是显得页面很没有水准,此时我们就可以使用异常处理器使页面出现异常时跳转到一个比较友好的错误提示页面