我正在使用springmvc为客户端创建restful API,我有一个用于检查accesstoken的拦截器.
public class AccesstokenInterceptor extends handlerinterceptorAdapter{ @OverrIDepublic boolean preHandle(httpServletRequest request,httpServletResponse response,Object handler) throws Exception{ if (handler instanceof HandlerMethod) { HandlerMethod handlerMethod = (HandlerMethod) handler; Authorize authorizerequired = handlerMethod.getmethodAnnotation(Authorize.class); if (authorizerequired != null) { String token = request.getheader("accesstoken"); ValIDatetoken(token); } } return true;}protected long ValIDatetoken(String token){ Accesstoken accesstoken = TokenImpl.GetAccesstoken(token); if (accesstoken != null) { if (accesstoken.getExpirationDate().compareto(new Date()) > 0) { throw new TokenExpiredException(); } return accesstoken.getUserID(); } else { throw new InvalIDTokenException(); }}
在我的控制器中,我使用@ExceptionHandler来处理异常,处理InvalIDTokenException的代码看起来像
@ExceptionHandler(InvalIDTokenException.class)public @ResponseBodyResponse handleInvalIDTokenException(InvalIDTokenException e){ Log.p.deBUG(e.getMessage()); Response rs = new Response(); rs.setErrorCode(ErrorCode.INVALID_TOKEN); return rs;}
但不幸的是,preHandle方法抛出的异常并未被控制器中定义的异常处理程序捕获.
任何人都可以给我一个处理异常的解决方案吗?@H_301_20@PS:我的控制器方法使用以下代码生成Json和xml:
@RequestMapPing(value = "login",method = RequestMethod.POST,produces ={ "application/xml","application/Json"})
最佳答案使用其他方法解决,捕获异常并转发到另一个控制器.try{ ValIDatetoken(token);} catch (InvalIDTokenException ex){ request.getRequestdispatcher("/API/error/invalIDtoken").forward(request,response); return false;} catch (TokenExpiredException ex){ request.getRequestdispatcher("/API/error/tokenexpired").forward(request,response); return false;}
总结 以上是内存溢出为你收集整理的java – 如何在Spring Interceptor中使用@ExceptionHandler?全部内容,希望文章能够帮你解决java – 如何在Spring Interceptor中使用@ExceptionHandler?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)