我正在使用spring mvc进行一些练习编程,我决定做一个关于内容协商的例子。
我开始使用uri“/ products”:
以下是我的控制器方法代码。
@RequestMapping(method = RequestMethod.GET)
public ModelAndView getAllProducts(){
ModelAndView result = new ModelAndView("index");
GenericListElementWrapper<Product> products = new GenericListElementWrapper<Product>();
products.setList(productDao.getAll());
ModelMap modelMap = new ModelMap();
modelMap.addAttribute("products",products);
result.addAllObjects(modelMap);
return result;
}
我想要实现的目标如下:
我的想法是:
也许只使用servlet过滤器来为文本/ html mimetype丰富ModelAndView?但是,你这样做是为了所有可能不受欢迎的html请求吗?
目前我解释自己的方式感觉就像我想要将完全呈现的html视图发送给客户端。也许我正在错误地看待这个问题,我应该考虑通过javascript加载页面后检索额外的内容?
那么有可能实现我的预期解决方案吗?另一部分是我的预期解决方案在实践中是否真正需要:P
答案 0 :(得分:1)
可能是添加拦截器并将其映射到您选择的路径。执行控制器上的处理程序后, interceptor.postHandle
可以访问ModelAndView
。可以添加一些额外的。
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/my/path"/>
<ref bean="enhancedContentInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
@Component
public class EnhancedContentInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
return true;
}
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
if (request.getContentType().equals("text/html")) {
modelAndView.addObject("tags", tagProvider.getTags());
}
}
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {}
}
}