spring - Spring Boot @RestControllAdvice 打印自定义错误消息以及正常错误消息。如何解决这个问题?
问题描述
我的要求是打印自定义错误消息,但在响应正文中,它会给出通常的错误消息以及自定义错误消息,如下所示。时间戳部分不是必需的,但正在打印。请告诉我哪里出错了。
{ "status": "UNAUTHORIZED", "message": "Token_Expired" }{ "timestamp": "2021-04-17T19:50:27.748+00:00", "status": 401, "error": "Unauthorized", "message": "", "path": "/getEmployees" }
我的要求是在令牌过期时只获取响应正文
{ "status": "UNAUTHORIZED", "message": "Token_Expired" }
异常建议类
` @RestControllerAdvice 公共类 ExceptionControllerAdvice 扩展 ResponseEntityExceptionHandler{
@ExceptionHandler(value = Exception.class)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public ErrorDTO processRuntimeException(Exception e) {
return new ErrorDTO(HttpStatus.UNAUTHORIZED, "Token_Expired");
}
}`
过滤器类
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException, TokenExpiredException {
try{
code.....
code.....
}
catch(ExpiredJwtException ex){
String newToken= request.getHeader("newToken");
String requestURL = request.getRequestURL().toString();
// allow for New Token creation if following conditions are true.
if (newToken != null && newToken.equals("true") && requestURL.contains("newToken")) {
allowFornewToken(ex, request);
}
else{
resolver.resolveException(request, response, null, ex);
throw new TokenExpiredException();
}
} catch (BadCredentialsException ex) {
request.setAttribute("exception", ex);
} catch (Exception ex) {
System.out.println(ex);
}
filterChain.doFilter(request, response);}
自定义消息的 TokenExpired 类
public class TokenExpiredException extends RuntimeException{
public TokenExpiredException() {
super("TOKEN_EXPIRED");
}
}
解决方案
推荐阅读
- sql - 不包括周末
- amazon-web-services - 如何使用 Docker 播种的 Cloudformation 编写 AWS VPC 脚本
- floating-point - NaN != NaN 的直观原因是什么?
- php - 如何在飞行php框架上使用mysqli
- angular5 - 使用 http.post 时如何从 HTTP 响应中获取标头
- java - JavaFX - 在循环中绘制(蛇)
- javascript - socket.io 中的聊天示例在 phonegap 中不起作用。我一直有这个错误
- angularjs - 范围不向 html 发送数据
- css - Woocommerce 中的迷你购物车按钮对齐错误?
- java - 当 ArrayList 都是通用类型时,为什么我无法通过 addAll 方法将 ArrayList 的内容添加到另一个 ArrayList 中?