直接看例子:
在java中:
@RequestMapping("/testResponseStatusExceptionResolver") public String testResponseStatusExceptionResolver(@RequestParam("i") Integer i) { if(i == 13) { throw new UserNameNoMatchPassword(); } System.out.println("ResponseStatusExceptionResolver执行..."); return "success"; }
定义自己的异常类:UserNameNoMatchPassword.java
package com.gong.springmvc.test; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus(value=HttpStatus.FORBIDDEN,reason="用户名和密码不匹配") public class UserNameNoMatchPassword extends RuntimeException { /** * */ private static final long serialVersionUID = 1L; }
使用ResponseStatus注解标注,value表示状态码,reason表示抛出异常的原因。
index.jsp
<a href="testResponseStatusExceptionResolver?i=10">testResponseStatusExceptionResolver</a>
启动服务器之后:
点击:
将i=10改为i=13并刷新:
显示自己定义的异常状态码和相关信息。
当然, ResponseStatus不仅可以对类进行注解,也可以对方法进行注解。比如我们这样做:
@ResponseStatus(reason="测试",value=HttpStatus.NOT_FOUND) @RequestMapping("/testResponseStatusExceptionResolver") public String testResponseStatusExceptionResolver(@RequestParam("i") Integer i) { if(i == 13) { throw new UserNameNoMatchPassword(); } System.out.println("ResponseStatusExceptionResolver执行..."); return "success"; }
运行服务器之后并点击:
在控制台可以看到:
目标方法的确是执行了,但是我们在方法上定义了ResponseStatus注解,因此会抛出异常并显示相关信息。
这就是ResponseStatus注解修饰方法和修饰类的作用以及他们之间的不同。