Spring MVC:如何在视图呈现之前更改模型属性?非常感谢

时间:2015-12-27 04:26:35

标签: spring-mvc

我想在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();
    }
}

请求和回复: doesn't have the attribute "AA"

0 个答案:

没有答案