SpringMVC由浅入深实用教程-返回对象Object

返回对象Object
处理器方法也可以返回Object 对象。这个Object 可以是Integer, String,自定义对象,Map,List 等。但返回的对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的。
返回对象,需要使用@ResponseBody 注解,将转换后的JSON 数据放入到响应体中。
(1) 环境搭建
A 、 maven pom.xml
由于返回Object 数据,一般都是将数据转化为了JSON 对象后传递给浏览器页面的。而这个由Object 转换为JSON,是由 Jackson 工具完成的。所以需要导入Jackson 的相关Jar 包。
依赖:

B、 声明注解驱动
将Object 数据转化为JSON 数据,需要由消息转换器HttpMessageConverter 完成。而转换器的开启,需要由<mvc:annotation- driven/>来完成。
SpringMVC 使用消息转换器实现请求数据和对象,处理器方法返回对象和响应输出之间的自动转换
当 Spring 容器进行初始化过程中,在<mvc:annotation-driven/>处创建注解驱动时,默认创建了七个HttpMessageConverter 对象。也就是说,我们注册<mvc:annotation-driven/>,就是为了让容器为我们创建HttpMessageConverter 对象。

HttpMessageConverter 接口:
HttpMessageConverter<T>是Spring3.0 新添加的一个接口,负责将请求信息转换为一个对象(类型为T),将对象(类型为T)输出为响应信息
HttpMessageConverter<T>接口定义的方法:
boolean canRead(Class<?> clazz,MediaType mediaType): 指定转换器可以读取的对象类型,即转换器是否可将请求信息转换为 clazz 类型的对象,同时指定支持 MIME 类型(text/html,applaiction/json 等)
boolean canWrite(Class<?> clazz,MediaType mediaType):指定转换器是否可将 clazz 类型的对象写到响应流中,响应流支持的媒体类型在 MediaType 中定义。
LIst<MediaType> getSupportMediaTypes():该转换器支持的媒体类型。
T read(Class<? extends T> clazz,HttpInputMessage inputMessage):将请求信息流转换为T 类型的对象。
void write(T t,MediaType contnetType,HttpOutputMessgae outputMessage):将 T 类型的对象写到响应流中,同时指定相应的媒体类型为contentType
加入注解驱动<mvc:annotation-driven/>后适配器类的 messageConverters 属性值


(2) 返回自定义类型对象
返回自定义类型对象时,不能以对象的形式直接返回给客户端浏览器,而是将对象转换为JSON 格式的数据发送给浏览器的。
由于转换器底层使用了Jackson 转换方式将对象转换为JSON 数据,所以需要导入Jackson 的相关Jar 包。
项目:returnObject-custom。在 returnVoid-ajax 基础上进行修改。
Step1:定义数据类

Step2:修改处理器 MyController

Step3:修改index 页面

(3) 返回 List 集合
项目:returnObject-list。在 returnObject-custom 基础上进行修改。
Step1:修改处理器 MyController

Step2:修改index 页面

(4) 返回字符串对象
若要返回非中文字符串,将前面返回数值型数据的返回值直接修改为字符串即可。但若返回的字符串中带有中文字符,则接收方页面将会出现乱码。此时需要使用@RequestMapping 的produces 属性指定字符集。
produces,产品,结果,即该属性用于设置输出结果类型。
项目:returnObject-String。直接修改处理器。

修改页面:

解读<url-pattern/>
配置详解
(1) *.do
在没有特殊要求的情况下,SpringMVC 的中央调度器DispatcherServlet 的<url-pattern/>常使用后辍匹配方式,如写为*.do 或者 *.action, *.mvc 等。
(2) /
可以写为/,因为DispatcherServlet 会将向静态资源的获取请求,例
如.css、.js、.jpg、.png 等资源的获取请求,当作是一个普通的 Controller 请求。中央调度器会调用处理器映射器为其查找相应的处理器。当然也是找不到的,所以在这种情况下,所有的静态资源获取请求也均会报 404 错误。
项目:url-pattern。在项目primary-annotation 基础上进行修改。
需求:在index.jsp 页面中存在一个访问图片的链接。该项目用于演示将<url- pattern/>写为*.do 可以访问到该图片,而写为/,则无法访问。
A、 在项目中添加图片
在项目的WebRoot 下添加一个目录images,并在其中添加一张图片资源。

B、 修改index 页面

C、 修改<url-pattern/>的值
保持<url-pattern/>的值为 *.do,扩展名方式,图片会正常显示。将<url-pattern/>的值修改为 / ,则图片将无法显示。
静态资源访问
<url-pattern/>的值并不是说写为/后,静态资源就无法访问了。经过一些配置后,该问题也是可以解决的。
(1) 使用<mvc:default-servlet-handler/>
声明了<mvc:default-servlet-handler />后,springmvc 框架会在容器中创建DefaultServletHttpRequestHandler 处理器对象。它会像一个检查员, 对进入DispatcherServlet 的URL 进行筛查,如果发现是静态资源的请求,就将该请求转由Web 应用服务器默认的 Servlet 处理。一般的服务器都有默认的Servlet。
在 Tomcat 中,有一个专门用于处理静态资源访问的 Servlet 名叫DefaultServlet。其<servlet-name/>为 default。可以处理各种静态资源访问请求。该 Servlet 注册在 Tomcat 服务器的web.xml 中。在 Tomcat 安装目录
/conf/web.xml。

项目:url-pattern-2。在项目url-pattern 基础上修改。
只需要在springmvc.xml 中添加<mvc:default-servlet-handler/>标签即可。

<mvc:default-servlet-handler/>表示使用DefaultServletHttpRequestHandler 处理器对象。而该处理器调用了 Tomcat 的DefaultServlet 来处理静态资源的访问请求。
当然了,要想使用<mvc: …/>标签,需要引入 mvc 约束

该约束可从 Spring 帮助文档中搜索关键字spring-mvc.xsd 即可获取:
docs/spring-framework-reference/htmlsingle/index.html
(2) 使用<mvc:resources/>(掌握)
项目:url-pattern-3。在项目url-pattern 基础上修改。
在 Spring3.0 版本后,Spring 定义了专门用于处理静态资源访问请求的处理器ResourceHttpRequestHandler。并且添加了<mvc:resources/>标签, 专门用于解决静态资源无法访问问题。需要在springmvc 配置文件中添加如下形式的配置:

location 表示静态资源所在目录。当然,目录不要使用/WEB-INF/及其子目录。
mapping 表示对该资源的请求(以 /images/开始的请求,如 /image/beauty.jpg ,,/images/car.png 等)。注意,后面是两个星号**。
(3) 声明注解驱动
解决动态资源和静态资源冲突的问题,在springmvc 配置文件加入:

最后奉上视频教程👇,视频观看效果更佳!!走过路过别忘素质三连哦~~

