这是我的控制器类
@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中实现?
答案 0 :(得分:2)
答案 1 :(得分:1)
如果您想检查每个请求的某些参数,请查看注释
@ControllerAdvice
您基本上使用此注释定义一个类,并在每个请求时调用它。在那里,您可以定义模型属性方法,错误处理程序方法等。
您可以使用requestparams作为输入创建一个生成modelattribute“_valid”的方法,如果无效则抛出异常。然后,exceptionhandler方法可以捕获它并生成错误页面。