热门标签 | 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设计模式



推荐阅读
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文介绍如何在Spring Boot项目中集成Redis,并通过具体案例展示其配置和使用方法。包括添加依赖、配置连接信息、自定义序列化方式以及实现仓储接口。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文探讨了在 ASP.NET MVC 5 中实现松耦合组件的方法。通过分离关注点,应用程序的各个组件可以更加独立且易于维护和测试。文中详细介绍了依赖项注入(DI)及其在实现松耦合中的作用。 ... [详细]
  • 本文介绍如何使用 Angular 6 的 HttpClient 模块来获取 HTTP 响应头,包括代码示例和常见问题的解决方案。 ... [详细]
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社区 版权所有