springmvc之异常处理ResponseStatusExceptionResolver

血红的双手。 提交于 2020-01-15 16:06:27

直接看例子:

在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注解修饰方法和修饰类的作用以及他们之间的不同。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!