在@ResponseStatus中使用多个值HttpStatus

时间:2011-02-16 06:48:27

标签: java spring http spring-mvc

我在我的例外中使用Spring注释@ResponseStatus,如

@ResponseStatus(value=HttpStatus.UNAUTHORIZED)
public class UnauthorizedException extends Exception{
}

问题是我想为HttpStatus.SC_SERVICE_UNAVAILABLE等许多值抛出相同的错误。

有没有办法在@ResponseStatus中使用多个值?提前谢谢。

4 个答案:

答案 0 :(得分:3)

没有。您不能拥有多个http状态代码。查看http spec

如果您确实想在不同的场景中设置不同的状态代码(但每个响应只有一个状态码),请删除注释,然后通过代码添加:

public X method(HttpServletResponse response) {
    if (..) {
         response.setStatus(..);
    } else {
         response.setStatus(..);
    }
}

答案 1 :(得分:2)

我想到的唯一解决方法是不使用@ResponseStatus注释。考虑在控制器中编写自己的错误处理代码,捕获相关的异常,以您希望的方式设置错误代码。如果它在多个控制器中,请考虑编写拦截器或使用AOP。

答案 2 :(得分:1)

您可以使用HttpServletResponse方法在.setStatus()类中设置响应代码,您可以从applicationContext获取该方法。

答案 3 :(得分:0)

为什么不创建多个异常类并抛出适当的异常类?