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代码页面