1. SpringMVC 的数据响应方式
(1)页面跳转
直接返回字符串
通过ModelAndView 对象返回
(2)回写数据
直接返回字符串
返回对象或集合
2. 页面跳转 - 返回字符串
3. 页面跳转 - 返回ModelAndView 形式1
在Controller 中方法返回ModelAndView 对象,并且设置视图名称。
@RequestMapping(value = "/quick2") public ModelAndView save2(){ /* Model:模型,作用封装数据 View:视图,作用展示数据 */ ModelAndView modelAndView = new ModelAndView(); // 设置模型数据 modelAndView.addObject("username","it"); // 设置视图名称 modelAndView.setViewName("success"); return modelAndView; }
4. 页面跳转 - 返回ModelAndView 形式2
在Controller 中方法形参上直接声明ModelAndView,无需在方法中自己创建,在方法中直接使用该对象设置视图,同样可以跳转页面。
@RequestMapping(value = "/quick3") public ModelAndView save3(ModelAndView modelAndView){ modelAndView.addObject("username","it"); modelAndView.setViewName("success"); return modelAndView; } @RequestMapping(value = "/quick4") public String save4(Model model){ model.addAttribute("username","it"); return "success"; }
5. 页面跳转 - 返回ModelAndView 形式3(不常用)
在Controller 中方法形参上直接使用原生的HTTPServletRequest 对象,只需声明即可。
@RequestMapping(value = "/quick5") public String save5(HttpServletRequest request){ request.setAttribute("username","it"); return "success"; }
6. 回写数据 - 直接回写字符串
通过SpringMVC 框架注入的response 对象,使用response 回写数据,此时不需要视图跳转,业务方法返回值为void
@RequestMapping(value = "/quick6") public void save6(HttpServletResponse response) throws IOException { response.getWriter().print("hello SpringMVC"); }
将需要回写的字符串直接返回,但此时需要通过@ResponseBody 注解告知SpringMVC 框架,方法返回的字符串不是跳转是直接在http 响应体中返回
@RequestMapping(value = "/quick7") @ResponseBody public String save7(){ return "hello SpringMVC"; }
7. 回写数据 - 直接回写json 格式字符串
使用json 转换根据jackson 进行转换
@RequestMapping(value = "/quick8") @ResponseBody public String save8() { return "{\"username\":\"zhangsan\",\"age\":18}"; } @RequestMapping(value = "/quick9") @ResponseBody public String save9() { User user = new User(); user.setUsername("lisi"); user.setAge(30); ObjectMapper om = new ObjectMapper(); String json = om.writeValueAsString(user); return json; }
8. 回写数据 - 返回对象或集合
通过SpringMVC 帮助我们对对象或集合进行json 字符串的转换并回写,为处理器适配器配置消息转换参数,指定使用jackson 进行对象或集合的转换,因此需要在spring-mvc.xml 中配置:
<!--配置处理器映射器--> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.cbor.MappingJackson2CborHttpMessageConverter"/> </list> </property> </bean>
@RequestMapping(value = "/quick10") @ResponseBody public User save10() { User user = new User(); user.setUsername("lisi"); user.setAge(30); return user; }
注意:
在SpringMVC 的各个组件中,处理器映射器、处理器适配器、视图解析器称为SpringMVC 的三大组件。使用注解驱动<mvc:annotation-driven/> 自动加载RequestMappingHandlerMapping(处理映射器) 和RequestMappingHandlerAdapter( 处 理 适 配 器 ),可用在spring-mvc.xml 配置文件中使用替代注解处理器和适配器的配置。同时默认底层就会集成jackson 进行对象或集合的json 格式字符串的转换。
<!--mvc的注解驱动--> <mvc:annotation-driven/>