工作中 所有的功能都用了请求去处理每个页面 但事后告知大多数需要修改为ajax的方式去处理
而又不想去再重新copy一份代码再去修改
于是 利用spring 的aop 去处理 根据http请求头的不同 去返回不同的视图
首先 在配置文件中配置拦截器
<mvc:interceptors>
<bean class="**.**.ViewInterceptor"/>
</mvc:interceptors>
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.springframework.web.servlet.view.json.MappingJacksonJsonView;
public class ViewInterceptor extends HandlerInterceptorAdapter{
private Logger logger = Logger.getLogger(ViewInterceptor.class);
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
String requestType = request.getHeader("X-Requested-With");
if(requestType!=null){
MappingJacksonJsonView view = new MappingJacksonJsonView();
view.setAttributesMap(modelAndView.getModelMap());
modelAndView.setView(view);
}
super.postHandle(request, response, handler, modelAndView);
}
}
在controller如下配置:
@RequestMapping(value = "/chooseOther.af")
public ModelAndView chooseOther(HttpServletRequest request,
HttpServletResponse response,String categoryId) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("parentId", categoryId);
List<Category> list = categoryService.getListByMap(map);
map.put("list", list);
return new ModelAndView("", map);
}
这样 就做到了 同一个url 根据不同的请求 返回不同的内容了
ps: 参考了这篇文章http://haohaoxuexi.iteye.com/blog/1750680 去了解Interceptor拦截器