Spring 面试题, Spring 中的 @ResponseStatus 注解的作用是什么?
Spring 面试题, Spring 中的 @ResponseStatus 注解的作用是什么?
QA
Step 1
Q:: Spring 中的 @
ResponseStatus 注解的作用是什么?
A:: @ResponseStatus 注解用于标注在控制器方法或自定义异常类上,以指定返回的 HTTP 状态码。通过 @
ResponseStatus,你可以明确告知 Spring 在某种情况下应该返回的 HTTP 状态码,而不需要显式地在方法中指定 ResponseEntity。通常用于控制器方法抛出异常时自动返回指定的状态码,而无需进一步的处理。
Step 2
Q:: @
ResponseStatus 注解可以标注在哪些位置?
A:: @
ResponseStatus 可以标注在控制器的方法上,也可以标注在自定义的异常类上。如果标注在方法上,当该方法被调用时,Spring 会自动返回指定的 HTTP 状态码;如果标注在异常类上,当该异常被抛出并未被捕获时,Spring 会返回该异常所指定的状态码。
Step 3
Q:: @
ResponseStatus 和 ResponseEntity 有什么区别?
A:: @ResponseStatus 是声明性地指定 HTTP 状态码的注解,常用于异常处理。而 ResponseEntity 是更灵活的响应实体,可以在运行时根据业务逻辑动态设置状态码、响应头以及响应体。ResponseEntity 适用于需要更复杂的响应控制场景,而 @
ResponseStatus 则更加简洁,适用于简单的状态码指定。
Step 4
Q:: 如何自定义一个带有 @
ResponseStatus 注解的异常类?
A:: 要自定义一个带有 @ResponseStatus 注解的异常类,首先创建一个继承自 RuntimeException 的类,并在类上使用 @
ResponseStatus 注解,指定希望返回的 HTTP 状态码。例如:
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
}
当此异常在控制器中被抛出时,Spring 将自动返回 404
状态码。