java面试题网

普通会员

483

帖子

9

回复

187

积分

楼主
发表于 2019-08-26 15:24:39 | 查看: 5056| 回复: 0

处理器方法的返回值

处理器方法的返回值

使用@Controller 注解的处理器的处理器方法,其返回值常用的有四种类型:

➢ 第一种:ModelAndView

➢ 第二种:String

➢ 第三种:无返回值 void

➢ 第四种:返回自定义类型对象

根据不同的情况,使用不同的返回值。

返回 ModelAndView(掌握)

若处理器方法处理完后,需要跳转到其它资源,且又要在跳转的资源间传递数据,此时 处理器方法返回 ModelAndView 比较好。当然,若要返回 ModelAndView,则处理器方法中 需要定义 ModelAndView 对象。

在使用时,若该处理器方法只是进行跳转而不传递数据,或只是传递数据而并不向任何 资源跳转(如对页面的 Ajax 异步响应),此时若返回 ModelAndView,则将总是有一部分多 余:要么 Model 多余,要么 View 多余。即此时返回 ModelAndView 将不合适。

返回 String(理解)

处理器方法返回的字符串可以指定逻辑视图名,通过视图解析器解析可以将其转换为物理视图地址,返回内部资源逻辑视图名,若要跳转的资源为内部资源,则视图解析器可以使用 InternalResourceViewResolver 内部资源视图解析器。此时处理器方法返回的字符串就是要跳转页面的文件名去掉文件扩展名后的部分。这个字符串与视图解析器中的 prefix、suffix 相结合,即可形成要访问的 URI。

处理器方法的返回值_www.wityx.com

项目:returnString-viewName。在 receiveParameters-object 基础上修改。直接修改处理器类 MyController

处理器方法的返回值_www.wityx.com

当然,也可以直接返回资源的物理视图名。不过,此时就不需要再在视图解析器中再配 置前辍与后辍了。

处理器方法的返回值_www.wityx.com

Step2:引入 jQuery 库

由于本项目要使用 jQuery 的 ajax()方法提交 AJAX 请求,所以项目中需要引入 jQuery 的库。在 WebRoot 下新建一个 Folder(文件夹),命名为 js,并将 jquery-1.11.1.js 文件放入其中。

处理器方法的返回值_www.wityx.com

当然,该 jQuery 库文件,需要在使用 ajax()方法的 index 页面中引入。

处理器方法的返回值_www.wityx.com

Step3:定义index页面

index页面由两部分内容构成:一个是,用于提交AJAX请求;一个是,用于处理AJAX请求。

处理器方法的返回值_www.wityx.com

点击按钮发起请求

处理器方法的返回值_www.wityx.com

Step4: 定义对象 Studen

处理器方法的返回值_www.wityx.com

Step5:修改处理器类 MyController

处理器对于 AJAX 请求中所提交的参数,可以使用逐个接收的方式,也可以以对象的方式整体接收。只要保证 AJAX 请求参数与接收的对象类型属性同名。

以逐个方式接收参数:

处理器方法的返回值_www.wityx.com

Step6:删除视图页面

由于是服务端直接向浏览器发回数据,所以也就无需视图页面了,所以需要删除WEB-INF 中的 jsp 目录及其中的 show 页面。

Json 介绍(理解)

JSON(JavaScript Object Notation)(官网:http://www.json.org/)是 一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。JSON 采用完全独立于语言的文本格式,这些特性使 JSON 成为理想的数据交换语言。

JSON 的两种结构

1.“名称/值”对的集合。 例如 { name:”张三” , age : 23 }

2. 值的有序列表,它被理解为数组。例如:[{ name:”张三” , age : 23 } , { name:”李力” , age :

28 }]

在 JSON-Lib 中 “名称/值”对的集合用 JSONObject 对象表示,数组用 JSONArray 对象表示。

常用的的 json 库: json-lib , Jackson , google 公司的 gson 和阿里巴巴的 fastjson

返回对象(掌握)

处理器方法也可以返回 Object 对象。这个 Object 可以是 Integer,String,自定义对象, Map,List 等。但返回的对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出 现的。

返回对象,需要使用@ResponseBody 注解,将转换后的 JSON 数据放入到响应体中。

(1) 环境搭建

A、 导入 Jar 包

由于返回 Object 数据,一般都是将数据转化为了 JSON 对象后传递给浏览器页面的。而

这个由 Object 转换为 JSON,是由 Jackson 工具完成的。所以需要导入 Jackson 的相关 Jar 包。

处理器方法的返回值_www.wityx.com

B、 注册注解驱动

将 Object 数据转化为 JSON 数据,需要由消息转换器 HttpMessageConverter 完成。而转换器的开启,需要由 来完成。

SpringMVC 使用消息转换器实现请求数据和对象,处理器方法返回对象和响应输出之间的自动转换

当 Spring 容器进行初始化过程中,在 处创建注解驱动时,默认创建了七个 HttpMessageConverter 对象。也就是说,我们注册 ,就是为了让容器为我们创建 HttpMessageConverter 对象。

处理器方法的返回值_www.wityx.com

HttpMessageConverter 接口 : HttpMessageConverter 是 Spring3.0 新添加的一个接 口,负责将请求信息转换为一个对象(类型为 T),将对象( 类型为 T)输出为响应信息HttpMessageConverter 接口定义的方法:

boolean canRead(Class clazz,MediaType mediaType): 指定转换器 可以读取的对象类型,即转换器是否可将请求信息转换为 clazz 类型的对 象,同时指定支持 MIME 类型(text/html,applaiction/json 等)

boolean canWrite(Class clazz,MediaType mediaType):指定转换器 是否可将 clazz 类型的对象写到响应流中,响应流支持的媒体类型 在 MediaType 中定义。

LIst getSupportMediaTypes():该转换器支持的媒体类 型。

T read(Class clazz,HttpInputMessage inputMessage): 将请求信息流转换为 T 类型的对象。

void write(T t,MediaType contnetType,HttpOutputMessgae outputMessage):将 T 类型的对象写到响应流中,同时指定相应的媒体类 型为 contentType加入注解驱动 后适配器类的 messageConverters 属性值

处理器方法的返回值_www.wityx.com

处理器方法的返回值_www.wityx.com

(2) 返回字符串对象

若要返回非中文字符串,将前面返回数值型数据的返回值直接修改为字符串即可。但若返 回 的 字 符 串 中 带 有 中 文 字 符 , 则 接 收 方 页 面 将 会 出 现 乱 码 。 此 时 需 要 使 用 @RequestMapping 的 produces 属性指定字符集。

produces,产品,结果,即该属性用于设置输出结果类型。

项目:returnObject-String。

直接修改处理器即可。

处理器方法的返回值_www.wityx.com

(3) 返回自定义类型对象

返回自定义类型对象时,不能以对象的形式直接返回给客户端浏览器,而是将对象转换为 JSON 格式的数据发送给浏览器的。

由于转换器底层使用了Jackson转换方式将对象转换为JSON数据,所以需要导入Jackson的相关 Jar 包。

项目:returnObject-custom。在 returnObject-string 基础上进行修改。

Step1:定义 VO 类

处理器方法的返回值_www.wityx.com

Step2:修改处理器 MyController

处理器方法的返回值_www.wityx.com

Step3:修改 index 页面

处理器方法的返回值_www.wityx.com

(4) 返回 List 集合

项目:returnObject-list。在 returnObject-custom 基础上进行修改。

Step1:修改处理器 MyController


文章来自www.wityx.com,转载请注明出处!原文地址http://www.wityx.com/post/1220_1_1.html


java面试题交流群:327440556

您需要登录后才可以回帖 登录 | 立即注册

java面试题网www.wuliaokankan.cnjava建站系统提供技术支持V2.1 网站地图 © 2016-2018