3.17.2 @ResponseStatus注解

3.17.2 @ResponseStatus注解

org.springframework.web.bind.annotation.ExceptionHandle.ResponseStatus注解是处理异常最简单的方式,其可以修饰一个或者一个方法,当修饰一个类的时候,通常修饰的是一个异常类。
使用@ResponseStatus注解可指定如下表所示的属性

属性 类型 是否必要 说明
code HttpStatus http状态码,如Http.CREATEDHttpStatus.OK
value String code属性作用相同
reason HttpStatus 错误信息

使用时,先声明一个自定义异常类,在自定义异常类上面加上@ResponseStatus注解,就表示在系统运行期间,当抛出自定义异常的时候,使用@ResponseStatus注解中声明的value属性和reason属性将异常信息返回给客户端,提高可读性。

示例 @ResponseStatus处理异常

新建一个项目ResponseStatusTest,加入所需的jar文件,示例代码如下:

index.jsp

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>异常处理示例</title>
</head>
<body>
<a href="find">@ResponseStatus异常处理</a>
</body>
</html>

BookException.java

1
2
3
4
5
6
7
8
9
10
11
package org.fkjava.exception;

import org.springframework.web.bind.annotation.ResponseStatus;

// BookException是自定义异常类,使用了@ResponseStatus注解修饰,
// reason表示抛出异常时显示的错误信息,
@ResponseStatus(reason = "查询数据失败")
public class BookException extends RuntimeException
{
private static final long serialVersionUID = 1L;
}

BookException是自定义异常类,使用了@ResponseStatus注解修饰, reason表示抛出异常时显示的错误信息,此处没有使用value属性,表示适用于所有http状态码.

BookController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package org.fkit.controller;

import org.fkjava.exception.BookException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class BookController {
@GetMapping("/find")
public String find() throws Exception
{
try
{
@SuppressWarnings("unused")
int i = 5 / 0;
return "success";
} catch (Exception e)
{
throw new BookException();
}
}
}

find方法模拟了一个异常,发生异常时抛出自定义异常BookException
部署ResponseStatusTest这个Web应用,在浏览器中输入如下URL来测试应用,
单击"ResponseStatus异常处理“超链接,发送"find"请求,请求处理方法抛出自定义BookException异常,显示异常信息.