SpringMVC处理自定义的异常(应用自定义的Exception)

1,这里指的异常是程序员自定义的异常,比如StudentIsNullException,而不是自带的异常,比如ClassNotFoundException等;

2,自定义一个异常:比如下图,这样若firstname没有初始化,则执行sayHello()方法则会报异常:SpittleIsNullException

@Component  //添加为Spring Bean
public class Spittle {
      public String firstname;
      public String lastname;
      public String username;
      public String password;
    public void sayHello(){
        if(this.firstname == null){
            throw new SpittleIsNullException();
        }
        else System.out.println("你好,我的名字是"+this.firstname);
    }}

3,实现一个继承自RunTimeException的SpittleIsNullException类,且加上注解:

@Component  //添加为Spring bean
/*将异常映射为415(UNSUPPORTED_MEDIA_TYPE对应的码值就是415)*/
@ResponseStatus(value = HttpStatus.UNSUPPORTED_MEDIA_TYPE,
                        reason = "参数是空")
public class SpittleIsNullException extends RuntimeException {
}

解释:HttpStatus的属性由对应的HTTP状态码,reason的值提示在页面上

4,如果想在异常出现时,只显示HTTP状态码的页面,那么完成2,3后就不用管了,如下图:

 5,如果想在异常出现时,不显示HTTP状态代码页面,而是想跳转到应用指定的页面,那么则在2,3的基础上,在调用可能发生异常的方法的Controller类中,添加异常处理的方法(跳转到指定页面而不是HTTP代码页面),重点是注解:@ExceptionHandler(SpittleIsNullException.class):

public class SpittleController {
    Spittle spittle;
    @Autowired
    public SpittleController(Spittle spittle){
        this.spittle=spittle;
    }
    @RequestMapping(value = "/{name}",method= RequestMethod.GET)
    public String spittles(
            @PathVariable("name") String name, Model model){
            System.out.println("还没到错误点");
            System.out.println(name);
            this.spittle.sayHello();
            return "view/a";
    }
    @ExceptionHandler(SpittleIsNullException.class)
    public String handleDup(){
        return "e";
    }

这样,不出现异常,就跳转到view包下的a.jsp页面;否则出现异常之后,就会跳转到e.jsp,不会显示HTTP代码页面


版权声明:本文为qq_41148045原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。