无法扩展弹簧控制器类

时间:2014-05-02 06:24:59

标签: java spring spring-mvc

这是我的控制器类

@Controller
@RequestMapping("/")
public class TokenEndpointspring extends SuperController {

    @RequestMapping(value = "/springtokenclientid")

    public @ResponseBody
    OAuthParams authorizeClientIdSecret(
            @RequestParam("param1") String param1,
            @RequestParam("param2") String param2, HttpServletRequest req)
            throws OAuthSystemException, IOException {
        OAuthParams param = new OAuthParams();
        if (CheckClientid(param1,param2)) {
            param.setHaserror(false);
        } else {
            param.setHaserror(true);
            param.setErrorMessage("invlaid client id ");

        }

        return param;
    }

这是我的超级控制器类。此类旨在由每个控制器进行扩展

public class SuperController   {


    public boolean CheckCommonParameter(HttpServletRequest request,HttpServletResponse response){
        // some logic 
    }

这是我的拦截器

public class Interceptor implements HandlerInterceptor {

    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
    // class cast exception is thrown 
        SuperController supercontroller=(SuperController)handler;

        // this is what i want to achieve 
        if(!supercontroller.CheckCommonParameter(request, response){
return false;
        }

我无法将处理程序对象强制转换为SuperController对象。

我正在获得类强制转换。

当我使用代码检查超类

handler.getClass().getSuperclass().newInstance(); 

它返回的是Object Class的实例,但不是我的超类SuperController。

我是否需要对其进行额外配置?是否可以在spring mvc中实现?

2 个答案:

答案 0 :(得分:2)

如果您使用的是Spring MVC 3.1+,则处理程序是处理请求的Controller实例。它是HandlerMethod的一个实例。查看this博文和this SO回答

答案 1 :(得分:1)

如果您想检查每个请求的某些参数,请查看注释

@ControllerAdvice

您基本上使用此注释定义一个类,并在每个请求时调用它。在那里,您可以定义模型属性方法,错误处理程序方法等。

您可以使用requestparams作为输入创建一个生成modelattribute“_valid”的方法,如果无效则抛出异常。然后,exceptionhandler方法可以捕获它并生成错误页面。