SpringMVC 中的控制器如何返回 JSON 数据

news2024/9/20 14:55:32

SpringMVC 中的控制器如何返回 JSON 数据

SpringMVC 是一个基于 Spring 框架的 Web 框架,它提供了一种方便的方式来处理 HTTP 请求和响应。在 SpringMVC 中,控制器是用来处理请求的组件,它们负责接收请求、处理请求并返回响应。在本文中,我们将讨论如何在 SpringMVC 中的控制器中返回 JSON 数据。

在这里插入图片描述

什么是 JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于 JavaScript 对象语法,但是可以被许多不同的编程语言使用。JSON 格式非常简洁,易于阅读和编写,可以用于在客户端和服务器之间传递数据。

JSON 格式由两种数据结构组成,分别是键值对和数组。键值对是由一个键和一个值组成的,键和值之间用冒号分隔,多个键值对之间用逗号分隔。数组是由一组值组成的,多个值之间用逗号分隔,数组用方括号包含。

下面是一个简单的 JSON 示例:

{
  "name": "John",
  "age": 30,
  "city": "New York",
  "hobbies": ["reading", "music", "sports"]
}

在 SpringMVC 中返回 JSON 数据

SpringMVC 提供了多种方式来返回 JSON 数据。下面我们将介绍其中几种常用的方式。

使用 @ResponseBody 注解

在 SpringMVC 中,使用 @ResponseBody 注解可以将方法返回的对象序列化为 JSON 格式并返回给客户端。@ResponseBody 注解可以用在方法上,也可以用在方法的返回类型上。

下面是一个使用 @ResponseBody 注解的示例:

@RestController
public class UserController {
  
  @GetMapping("/user")
  @ResponseBody
  public User getUser() {
    User user = new User();
    user.setName("John");
    user.setAge(30);
    return user;
  }
  
}

在上面的示例中,我们在 UserController 类上使用了 @RestController 注解,这样就不需要在每个方法上都使用 @ResponseBody 注解了。在 getUser 方法上,我们使用 @ResponseBody 注解将返回的 User 对象序列化为 JSON 格式并返回给客户端。

使用 ResponseEntity

除了使用 @ResponseBody 注解,还可以使用 ResponseEntity 类来返回 JSON 数据。ResponseEntity 类是 SpringMVC 提供的一个实现了 HttpEntity 接口的类,它可以包含响应头、响应状态码和响应体。

下面是一个使用 ResponseEntity 的示例:

@RestController
public class UserController {
  
  @GetMapping("/user")
  public ResponseEntity<User> getUser() {
    User user = new User();
    user.setName("John");
    user.setAge(30);
    return ResponseEntity.ok(user);
  }
  
}

在上面的示例中,我们使用 ResponseEntity 类来创建一个响应实体,并将 User 对象作为响应体返回给客户端。使用 ResponseEntity 可以更加灵活地控制响应头和响应状态码。

使用 MappingJackson2HttpMessageConverter

除了使用 @ResponseBody 注解和 ResponseEntity,还可以使用 MappingJackson2HttpMessageConverter 类来将对象序列化为 JSON 格式并返回给客户端。MappingJackson2HttpMessageConverter 是 SpringMVC 提供的一个将 Java 对象序列化为 JSON 格式的消息转换器。

下面是一个使用 MappingJackson2HttpMessageConverter 的示例:

@RestController
public class UserController {
  
  @GetMapping("/user")
  public HttpEntity<User> getUser() {
    User user = new User();
    user.setName("John");
    user.setAge(30);
    
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    MediaType mediaType = MediaType.APPLICATION_JSON;
    HttpOutputMessage outputMessage = new ServletServerHttpResponse(response);
    
    converter.write(user, mediaType, outputMessage);
    
    return response;
  }
  
}

在上面的示例中,我们首先创建了一个 MappingJackson2HttpMessageConverter 对象,并设置了要返回的User 对象。然后我们创建了一个 MediaType 对象,指定返回的数据类型为 JSON。接着我们创建了一个 HttpOutputMessage 对象,该对象用于将序列化后的 JSON 数据输出到响应中。最后,我们调用 MappingJackson2HttpMessageConverter 的 write 方法将 User 对象序列化为 JSON 格式并返回给客户端。

总结

在本文中,我们介绍了 SpringMVC 中多种方式返回 JSON 数据的方法。使用 @ResponseBody 注解可以将方法返回的对象序列化为 JSON 格式并返回给客户端;使用 ResponseEntity 类可以更加灵活地控制响应头和响应状态码;使用 MappingJackson2HttpMessageConverter 类可以将 Java 对象序列化为 JSON 格式并返回给客户端。根据具体业务需求,我们可以选择适合的方式来返回 JSON 数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/736691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三大城市分会场精彩呈现—2023架构·可持续未来峰会圆满收官!

2023年6月30日&#xff0c;由The Open Group主办的2023架构可持续未来峰会三大城市分会场成功举办&#xff0c;也代表着本次The Open Group半年度架构峰会圆满收官&#xff01; 本次大会以“可持续未来”为主题&#xff0c;采用“13”&#xff0c;即北京主会场上海/成都/深圳三…

svg修改图标颜色

对于svg图标&#xff0c;想通过hover或者active 添加颜色&#xff0c;没有办法修改&#xff0c;解决办法&#xff1a; 1. 修改svg图片源 最开始的svg图标&#xff1a; 修改这个fill"currentColor" 要是要修改线条颜色就修改stroke属性&#xff1a; fill属性设置对象…

青岛大学_王卓老师【数据结构与算法】Week05_02_栈的定义和特点_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c; 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础…

这所985太好考了,专硕06方向仅刷一人,其余过线全收!

一、学校及专业介绍 东北大学&#xff08;Northeastern University&#xff09;位于辽宁省沈阳市&#xff0c;是中华人民共和国教育部直属全国重点大学。它是国家“双一流”建设高校、国家“211工程”和“985工程”重点建设高校&#xff0c;全国首批博士、硕士学位授予单位。 …

10.12UEC++/结构体和枚举

1.结构体&#xff1a; 定义&#xff1a; 类中创建对象&#xff1b; UE4中使用&#xff1a; 也可以定义一个结构体类型的变量&#xff1a; 结构体成员想要在细节面板中调整时&#xff0c;也需要每个都加上UPropPerty指令宏才可以&#xff1a; 此时该变量没有break功能&#xff0…

Seal AppManager v0.2 发布:进一步简化应用部署体验

经过近3个月的研发&#xff0c;Seal AppManager v0.2 已正式发布。 Seal AppManager 是一款基于平台工程理念的应用统一部署管理平台&#xff0c;于今年4月首次推出。在上一版本中&#xff0c;我们已经释出集成 ChatGPT 简化服务模板代码生成、云成本可视化、动态环境管理等功…

用html+javascript打造公文一键排版系统2:显示源码/显示预览、清除格式

我们从实现最简单、最基本的功能开始。 一、显示源码/显示预览 我们通过btnShowSrc来实现示源码/显示预览功能&#xff0c;根据btnShowSrc.value来判断<iframe>的显示的内容并切换。 <iframe>默认为显示预览&#xff0c;所以btnShowSrc.value值为“显示源码”&a…

Flink DataStream之Connect合并流

新建类 package test01;import org.apache.flink.configuration.Configuration; import org.apache.flink.streaming.api.datastream.ConnectedStreams; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.datastre…

flutter开发实战-指纹、面容ID验证插件实现

flutter开发实战-指纹、面容ID验证插件实现 在iOS开发中&#xff0c;经常出现需要指纹、面容ID验证的功能。 指纹、面容ID是一种基于用生物识别技术&#xff0c;通过扫描用户的面部特征来验证用户身份。 一、效果图 二、iOS指纹、面容ID验证 在iOS中实现指纹、面容ID验证功能…

一同感受C++模版的所带来的魅力

文章目录 一、泛型编程思想二、函数模版1、函数模板概念2、函数模板格式3、函数模板的原理4、函数模板的实例化5、模板参数的匹配原则 三、类模版1、类模板的定义格式2、类模板的实例化 四、总结与提炼 一、泛型编程思想 首先我们来看一下下面这三个函数&#xff0c;如果学习过…

磁盘与文件系统管理

磁盘结构及分区表示 硬盘 Hard Disk Drive &#xff0c;简称 HDD 是计算机常用的存储设备之一。 1 磁盘基础 1.1 硬盘的结构 1.1.1 数据结构 ①扇区&#xff1a;磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)。硬盘的第一个扇区&#xff0c;叫做引导…

【mysql】-【锁】

文章目录 概述MySQL并发事务访问相同记录读-读情况写-写情况读-写或写-读情况并发问题的解决方案 锁的不同角度分类 概述 事务的隔离性由这章讲述的锁来实现。 MySQL并发事务访问相同记录 并发事务访问相同记录的情况大致可以划分为3种: 读-读情况 读-读情况&#xff0c;…

使用vite创建vue3的Cesium基础项目

使用vite创建vue3的Cesium基础项目 使用vite创建vue3项目&#xff1a;可以参考官方文档Vite官方中文文档 1.1 在指定文件夹路径下使用npm&#xff08;前提是已经安装好了node&#xff09;&#xff1a; bash npm create vitelatest 1.2 cd到创建的项目文件夹&#xff1a; bash c…

符号化的正确姿势

GUI方式 将 .ips crash report 文件拖放到 Xcode > Window > Devices and Simulators > View Device Logs中, 然后导出 .crash 符号化文件. 使用条件: crash report 对应的 Archive 包是在本机构建的 symbolicatecrash symbolicatecrash 是一个 exec (可执行文件), …

常见的BUG---1、虚拟机启动之后,突然发现没有ens33网卡

1、问题描述 今天一开启虚拟机&#xff0c;发现用XShell连接不上我的一台虚拟机&#xff0c;其他虚拟机是正常可以连接的&#xff0c;我稍微看了一下XShell的配置和Windows中的映射文件&#xff08;hosts&#xff09;&#xff0c;都没有啥问题&#xff0c;然后我就知道应该是虚…

javap反编译字节码文件

javap -v main.class{public static void main(String[] args) {int a10;int b10;int cab;return;} } Classfile /F:/myCode/java/jvm/0710_demo01/untitled/target/classes/org/example/main.classLast modified 2023年7月10日; size 447 bytesMD5 checksum 675a0d673d66326b…

基于SpringBoot+Vue的影城管理系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

服务器中了malox勒索病毒的解决办法流程与解密方案

随着网络科技技术的不断发展&#xff0c;越来越多的企业开始重视数据&#xff0c;数字化办公已经成为众多企业工作的常态&#xff0c;因此数据的安全性受到了额外重视。但网络科技技术的发展不仅方便了我们的工作&#xff0c;也给企业的数据安全带来了很大威胁。近期&#xff0…

基于SpringBoot+Vue的疫情网课管理系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…