问题描述
当客户端向我的服务器发送无效令牌时,服务器将返回500状态代码。我认为这很丑。 400(错误请求)代码会更正确吗?
如果400码更正确,那么如何处理500错误?我试图捕获SignatureException
并抛出ResponseStatusException,但随后收到如下响应:
{
"timestamp": "2020-10-17T09:34:26.939+00:00","status": 500,"error": "Internal Server Error","message": "400 BAD_REQUEST \"cause: token is invalid\"","path": "/toucan/user/delete"
}
我指定的消息和状态代码在错误消息中,代码为500。有没有办法在没有500的情况下抛出400状态?
解决方法
首先,让我们谈谈状态码。
如果发送的令牌无效,则用户无权使用状态代码为401
的API。
然后让我们讨论一下如何在Spring中拦截您的异常。您应该检查official documentation并在@ResponseStatus(value=HttpStatus.UNAUTHORIZED,reason="Invalid Token")
类上使用SignatureException
(或捕获它并使用注释添加自定义Exception
)。
要么实现@ControllerAdvice
来通过带有以下注释的方法来处理异常:@ExceptionHandler(value = SignatureException.class)
。
文档中都提到了这两种解决方案。