我想在View渲染之前添加或删除一些属性,我认为拦截器可以帮助我,但它不起作用,任何人都可以帮助我,非常感谢
mvc context xml:
<mvc:annotation-driven></mvc:annotation-driven>
<mvc:interceptors>
<bean class="org.tt.interceptor.FieldsInterceptor"></bean>
</mvc:interceptors>
<bean id="jsonWSResponseView" class="org.tt.view.JsonWSResponseView"></bean>
<bean id="xmlWSResponseView" class="org.tt.view.XmlWSResponseView"></bean>
<!-- ViewResolver -->
<bean id="viewResolver" class="org.tt.ws.WSViewResolver">
<property name="views">
<map>
<entry key="json" value-ref="jsonWSResponseView"></entry>
<entry key="xml" value-ref="xmlWSResponseView"></entry>
</map>
</property>
</bean>
控制器:
@Controller
@RequestMapping("/traffic/")
public class TrafficController {
private static org.slf4j.Logger logger = LoggerFactory.getLogger(TrafficController.class);
@RequestMapping("query")
public ModelAndView getTrafficInfo(ModelAndView modelAndView, @RequestParam String name){
modelAndView.setViewName("json");
modelAndView.addObject("test","test");
modelAndView.addObject("name",name);
return modelAndView;
}}
FieldsInterceptor:
public class FieldsInterceptor extends HandlerInterceptorAdapter {
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
try {
modelAndView.addObject("AA", "add attribute");
}catch (Exception e){
e.printStackTrace();
}
}
}
观点:
public class JsonWSResponseView implements View {
public String getContentType() {
return "application/Json";
}
public void render(Map<String, ?> map, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
OutputStreamWriter os = new OutputStreamWriter(httpServletResponse.getOutputStream());
os.write(JSON.toJSONString(map.get("modelAndView")));
os.close();
}
}