SpringMVC的数据响应方式主要有页面跳转和回写数据
页面跳转:直接返回字符串
即https://www.cnblogs.com/maomaodesu/p/12268886.html中主要介绍的方式。
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200208155733231-1394187566.png)
页面跳转:通过ModelAndView对象返回
UserController类
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200208163832931-1105982582.png)
设置模型数据时往request域中存储数据,这样可以在转发到页面时通过EL获取数据
默认转发到success.jsp
UserController类的另一种方式
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200208165106549-1840198627.png)
功能上类似ModelAndView的有Model,Map,ModelMap,request(不推荐)等,使用方法一致,都是存储到request域,用哪个都行。
success.jsp中使用EL表达式
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200208163844612-1999300793.png)
EL只能从域中取值,因此是从request中取得的数据
效果:
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200208170810106-1898306932.png)
回写数据:直接返回字符串
在没有SpringMVC时我们使用response对象,现在可以通过SpringMVC框架注入的response对象,使用response.getWriter().print("hello world")回写数据,此时不需要视图跳转,业务方法返回值是void,这种方式不通用。
UserController类(使用response对象):
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200209143353073-12959431.png)
现在的做法是需要返回字符串时,通过@ResponseBody告知SpringMVC框架
UserController类(使用@ResponseBody注解):
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200209173737735-1792188195.png)
@ResponseBody
标注在方法上,用于表示把该方法的返回值直接写回客户端
标注在类上,相当于把该类的所有方法都标注了此注解
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200209144738536-913773490.png)
@RestController相当于@Controller+@ResponseBody
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200209144808392-2041055299.png)
效果:
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200209173807616-544098499.png)
发现是有乱码的,为什么SpringMVC会出现中文乱码,SpringMVC把字符串返回时默认情况下会走字符串Http消息转换器StringHttpMessageConverter,通过这个转换器把字符串转换成Http消息返回到浏览器。这个转换器
中的默认字符集DEFAULT_CHARSET是ISO-8859-1是一个北欧的字符集,不包含中文,所以我们要更改它的字符集。因此我们在spring-mvc.xml的
中设置我们将要使用到的消息转换器。
conversionService自定义类型转换器
自定义DateConverter类实现Converter接口
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200211103739406-1953536168.png)
在spring-mvc.xml里声明自定义的转换器,声明后默认的DateConverter就会被覆盖
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200211103855437-1172176817.png)
配置spring-mvc.xml来修正乱码:需要使用上面声明转换器conversionService
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200209175901040-1904103704.png)
回写数据:返回对象或集合(对象转成json字符串然后返回)
SpringMVC默认会把对象自动转换为json字符串然后写回,底层默认使用Jackson作为转换器(这里就不配置了,用默认的)
在pom.xml中引入jar包
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200209152158653-1719818965.png)
SpringMVC的注解驱动同时集成Jackson转换器,就不需要手动配置转换器了
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200209172519870-1123313693.png)
UserController类:
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200209183837136-615910159.png)
结果:
![](https://img2018.cnblogs.com/blog/1772487/202002/1772487-20200209183951968-1733019163.png)