2016-05-25 54 views
1

我需要解决方案,以便如何将拦截器验证和控制器验证与Spring结合起来,以便在页面中显示所有错误(来自拦截器和控制器)。在Spring MVC中结合了拦截器验证和控制器验证

我当前的场景: 当拦截器获取错误,他重定向到当前页面,并显示错误,而不去控制器。

我需要去控制器也做其他验证,并采取我拦截器错误,如果存在,因为我需要用户知道页面中的所有错误。

我可以将拦截器的属性传递给控制器​​吗?解决方案是什么?

回答

0

我会自拦截通过请求属性通过验证错误控制器:

public class FooInterceptor extends HandlerInterceptorAdapter { 

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

     request.setAttribute("interceptorValidationErrors", "a list of validation errors"); 

     return super.preHandle(request, response, handler); 
    } 
} 

而在这样的控制器阅读:

@Controller 
public class FooController { 

    @RequestMapping("/foo") 
    String get(HttpServletRequest request) { 

     List<ObjectError> interceptorErrors = (List<ObjectError>) request.getAttribute("interceptorValidationErrors"); 

     return "someViewName"; 
    } 
} 
+0

给我空指针异常时,试图通过(request.getAttribute(“interceptorValidationErrors”)来访问控制器中的属性,请求对象被填充但没有interceptorValidationErrors属性。 –

+0

@MohammedMostafa是你实际调用的拦截器吗?你需要配置sprin g –

+0

你说得对,但没有达到request.setattribute,当我改变了拦截器扩展HandlerInterceptorAdapter来实现HandlerInterceptor它的工作正常(我不知道为什么!) –