类型转换出错 将DefaultServletHttpRequestHandler 转换为HandlerMethod类型

重口味哈密瓜 发布于 2014/11/26 09:58
阅读 11K+
收藏 0

org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler cannot be cast to org.springframework.web.method.HandlerMethod

如何将DefaultServletHttpRequestHandler 转换为HandlerMethod类型

 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

    String businessName = resolve(urlPathHelper.getServletPath(request));
        request.setAttribute(TENANT_BUSINESS_NAME_KEY, businessName);
        // restrict the access
        HandlerMethod  method = (HandlerMethod) handler;
        TenantResource tenantResource = method.getMethodAnnotation(TenantResource.class);
        RootResource rootResource = method.getMethodAnnotation(RootResource.class);
        boolean isRootResource = false;
        // get annotation from class when no annotation is specified
        if (tenantResource == null && rootResource == null) {
            tenantResource = AnnotationUtils.findAnnotation(method.getBeanType(), TenantResource.class);
            rootResource = AnnotationUtils.findAnnotation(method.getBeanType(), RootResource.class);
        }

        // still with no annotation, set default
        if (tenantResource == null && rootResource == null) {
            isRootResource = true;
        }


        // tenant resource
        if (tenantResource != null && StringUtils.isEmpty(businessName)) {
            throw new NoHandlerFoundException(request.getMethod(), request.getRequestURI(), null);
        }

        // root resource
        if ((rootResource != null || isRootResource) && !StringUtils.isEmpty(businessName)) {
            throw new NoHandlerFoundException(request.getMethod(), request.getRequestURI(), null);
        }

        return super.preHandle(request, response, handler);
    }
加红的那句出错了,求大神帮助

加载中
0
骑着毛驴的汉子
骑着毛驴的汉子

我今天也遇到这个问题了,你的请求里面还带有其他的请求的时候,而且不是你配置的拦截的规则,那么它转换类型的时候就报错了。我这边是页面请求里面还有js的请求,所以controller的方法请求通过了,js的拦截到的时候,你的handler 其实不是你配置的那个,所以就出现这个问题了

解决办法:

if (handler instanceof HandlerMethod) {
permission = ((HandlerMethod) handler).getMethodAnnotation(Permission.class);
} else {
return true;
}

返回顶部
顶部