热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringMVC12使用请求参数和返回值的Object类型

对返回Objec

处理器方法也可以返回Object 对象。这个 Object 可以是 Int e ger S tring 自定义对象,Map List 等。但返回的 对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的。返回对象,需要使用@ResponseBody 注解, 将转换后的 JSON 数据 放入到响应体中。


注册注解驱动

将Object 数据转化为 JSON 数据,需要由消息转换器 HttpMessageConverter 完成。而转换器的开启,需要由 来完成。在spring5.0中,使用注解开发的时候就需要这个.在5.0之前可以不写.但是将数据转为json还是需要的

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

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



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


一共有五个接口


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,Htt pInputMessage inputMessage) 将请求信息流转换为 T 类型的对象。


void write(T t,MediaType contnetType,HttpOutputMessgae outputMessage):将 T 类型的对象写到响应流中,同时指定相应的媒体类 型为 contentType

springMVC默认使用Jackson工具帮助我们转换,所以需要加入对应坐标


常用的实现类是作用


返回字符串对象(Object)-String

String表示数据,和视图无关

处理器方法返回String区分数据还是视图?

看处理器方法上面是否有@ResponseBody

1.有@ResponseBody, String就是数据

2.没有@ResponseBody,String就是视图


index2.jsp页面

<script>
$(function () {
$("button").click(function () {
$.ajax({
url:"test01/test_string_ajax.do",
type : "post",
dataType:"json",
success :function (request) {
alert(request);
}
})
})
})
script>

控制器

@RequestMapping(value = "test_string_ajax")
@ResponseBody
public String test_string_ajax(){
return "Hello SpringMVC HttpMessageConverter";
}

测试:因为页面返回接口的是一个json,但是要给字符串不能转成json所以会报错

把页面代码dataType:"json",去掉测试,现在个前端响应一个正常的字符串


需要注意的是响应头信息为text/plain;charset=ISO-8859-1,此时响应中文会有问题返回的字符串中带有中文字符,则接收方页面将会出现乱码。此时需要使用@RequestMapping 的 produces 属性 指定字符集 。

@RequestMapping(value = "test_string_ajax",produces = "text/plain;charset=utf-8")


响应对象

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

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


index2.jsp

<script>
$(function () {
$("button").click(function () {
$.ajax({
url:"test01/test_object_ajax.do",
type : "post",
dataType:"json",
success :function (request) {
alert(request.name + " ," + request.age);
}
})
})
})
script>

controller类

@RequestMapping(value = "test_object_ajax")
@ResponseBody
public Student test_object_ajax(){
Student student = new Student();
student.setName("浪里虎哥");
student.setAge(12);
return student;
}

测试:


处理器方法返回对象的内部处理过程:

1.框架根据处理器方法返回值的数据类型, 遍历HttpMessageConverter接口的实现类,判断哪个实现类能处理这种返回值类型。String-StringHttpMessageConveger

2.使用HttpMessageConverter的实现类,调用它的write方法,把返回值对象转为需要的数据格式(文本,json,xml等)String的返回值转为 iso-8859-1编码的文本字符串

3.使用@ResponseBody,把2中的结果数据,通过应答对象的输出流,输出到浏览器。


返回lIst

index2.jsp

<script>
$(function () {
$("button").click(function () {
$.ajax({
url:"test01/test_list_ajax.do",
type : "post",
dataType:"json",
success :function (request) {
//alert(request.name + " ," + request.age);
$(request).each(function (index) {
alert(request[index].name + request[index].age);
})
}
})
})
})
script>

controller

@RequestMapping(value = "test_list_ajax")
@ResponseBody
public List test_list_ajax(){
Student student1 = new Student();
student1.setName("浪里虎哥1");
student1.setAge(12);
Student student2 = new Student();
student2.setName("浪里虎哥2");
student2.setAge(13);
List students = new ArrayList<>();
students.add(student1);
students.add(student2);
return students;
}

测试

喜欢转发

明天见

SpringMVC 11 请求参数返回值void

SpringMVC 10 处理器方法的返回值(ModelAndView和String))

SpringMVC 09 请求参数中文乱码问题

SpringMVC 08 请求参数绑定

SpringMVC 07  @RequestMapping说明

SpringMVC 06 注解式开发入门

SpringMVC 05 再解

SpringMVC 04 执行流程的简单原码分析分析

SpringMVC 03 视图解析器及简述执行流程

SpringMVC 02 概述及配置式入门

SpringMVC 01 前述 三层架构和MVC设计模式



推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • JavaScript中属性节点的类型及应用
    本文深入探讨了JavaScript中属性节点的不同类型及其在实际开发中的应用,帮助开发者更好地理解和处理HTML元素的属性。通过具体的案例和代码示例,我们将详细解析如何操作这些属性节点。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
author-avatar
余温
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有