我有一个问题,我需要尽快修复一个问题......在解决这个问题时,我已经解决了一些问题。
请参阅,我需要从JSP页面显示当前服务的Spring Controller。该名称不必在JSP本身中进行解析,我实际上正在使用另一个类(一种标记库)在任何页面的底部显示此信息。
有没有办法从外部类中获取控制器名称? (当我在外面说,我的意思是来自另一个类而不是控制器本身。) 也许是从某种程度上的要求? (或者一些Spring Security请求属性?)。 也许是一个拦截器?
我想避免从控制器扩展一个类来解决这个问题。
任何建议都是适当的!
答案 0 :(得分:4)
您可以实施HandlerInterceptor
* 它有一个方法postHandle
,它有两个你需要的参数:
Object handler
- 可以强制转换为HandlerMethod
,包含有关处理请求的Controller方法的信息ModelAndView
- 您需要添加有关处理方法完成方法签名org.springframework.web.servlet.HandlerInterceptor#postHandle
:
void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView)
throws Exception;
*不是直接实现HandlerInterceptor
,而是可以扩展HandlerInterceptorAdapter
- 这是一个方便的抽象类,它实现了HandlerInterceptor
所有带空体的方法,因此只需要覆盖所需的方法。
*不要混淆,有两个HandlerInterceptor
类,一个用于Servlet,一个用于Portlets(org.springframework.web.portlet.HandlerInterceptor
)。使用HandlerInterceptor
for Servlets oorg.springframework.web.servlet.HandlerInterceptor
!
答案 1 :(得分:1)
正常的java方式,来自控制器本身的mwith可能赢了;因为spring创建了原始类的代理:
String className = this.getClass().getSimpleName();
我认为您需要实施request mapping handler
答案 2 :(得分:0)
你可以创建一个after advise拦截器,它将在你的控制器被调用后被调用。在这个拦截器中,您可以获得应用此建议的pointCut方法。完成后,您可以将其添加为ModelAndView映射中的属性。