4.1 返回JSON数据

1. 默认实现方式

JSON是目前主流的前后端数据传输方式,Spring MVC中使用消息转换器HttpMessageConverter对JSON的转换提供了很好的支持,在Spring Boot中更进一步,对相关配置做了更进一步的简化。
默认情况下,当开发者新创建一个Spring Boot项目后,添加Web依赖,代码如下:

        <!-- SpringBoot Web容器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

这个依赖中默认加入了jackson-databind作为JSON处理器,此时不需要添加额外的JSON处理器就能返回一段JSON了。
创建一个Book实体类:

public class Book {private String name;private String author;//JsonIgnore,忽略价格字段@JsonIgnoreprivate Float price;@JsonFormat(pattern ="yyyy-MM-dd")private Date publicationDate;//省略getter/setter
}

然后创建BookController,返回Book对象即可:

@Controller
public class BookController {@GetMapping("/book")@ResponseBodypublic Book book(){Book book = new Book();book.setAuthor("罗贯中");book.setName("三国演义");book.setPrice(30f);book.setPublicationDate(new Date());return book;}
}

当然,如果需要频繁地用到@ResponseBody注解,那么可以采用@RestController组合注解代替@Controller和@ResponseBody,代码如下:

@RestController
public class BookController {@GetMapping("/book")public Book book(){Book book = new Book();book.setAuthor("罗贯中");book.setName("三国演义");book.setPrice(30f);book.setPublicationDate(new Date());return book;}
}

此时,在浏览器中输入“http://localhost:8080/book”,即可看到返回了JSON数据,如图4-1 所示。

在这里插入图片描述
这是SpringBoot自带的处理方式。如果采用这种方式,那么对于字段忽略、日期格式化等常见都需求通过注解来解决

这是通过Spring中默认提供的MappingJackson2HttpMessageConverter来实现的,当然开发者在这里也可以根据实际需求自定义JSON转换器。

2. 自定义转化器

常见的JSON处理器除了jackson-databind之外,还有Gson和fastson,这里针对常见用法分别举例。

1.使用Gson

Gson是Google的一个开源JSON解析框架。
使用Gson,需要先除去默认的jackson-databind,然后加入Gson依赖,代码如下:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 除去默认的jackson-databind--><exclusions><exclusion><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></exclusion></exclusions>
</dependency>
<!--Gson依赖-->
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId>
</dependency>

由于SpringBoot中默认提供了Gson的自动转换类GsonHttpMessageConvertersConfiguration,因此Gson的依赖添加成功后,可以像使用jackson-databind那样直接使用Gson。
但是在Gson进行转换时,如果想对日期数据进行格式化,那么还需要开发者自定义HttpMessageConverter
自定义HttpMessageConverter可以通过如下方式。
需要提供一个GsonHttpMessageConverter 即可,代码如下:

@Configuration
public class GsonConfig{@BeanGsonHttpMessageConverter gsonHttpMessageConverter(){GsonHttpMessageConverter converter = new GsonHttpMessageConverter();GsonBuilder builder = new GsonBuilder();//设置Gson解析时日期的格式。builder.setDateFormat("yyyy-MM-dd");//设置Gson解析时修饰符为protected的字段被过滤掉builder.excludeFieldswithModifiers(Modifier.PROTECTED);Gson gson = builder.create();converter.setGson(gson);return converter;}
}

代码解释:

  • 开发者自己提供一个GsonHttpMessageConverter 的实例。
  • 设置Gson解析时日期的格式。
  • 设置Gson解析时修饰符为protected的字段被过滤掉。
  • 创建Gson对象放入GsonHttpMessageConverter的实例中并返回converter。

此时,将Book类中的price字段的修饰符改为protected,代码如下:

public class Book {private String name;private String author;protected Float price;private Date publicationDate;//省略getter/setter
}

最后,在浏览器中输入“http:/localhost:8080/book”,即可看到运行结果,如图4-2所示。
在这里插入图片描述

2.使用fastjson

fastson是阿里巴巴的一个开源JSON解析框架,是目前JSON解析速度最快的开源框架,该框架也可以集成到Spring Boot中。
不同于Gson,fastjson继承完成之后并不能立马使用,需要开发者提供相应的HttpMessageConverter后才能使用,集成fastjson的步骤如下。
首先除去jackson-databind依赖,引入fastjson依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>com,fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version>
</dependency>

然后配置fastjson的HttpMessageConverter:

@Configuration
public class MyFastJsonConfig {@BeanFastJsonHttpMessageConverter fastJsonHttpMessageConverter(){FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();FastJsonConfig config = new FastJsonConfig();config.setDateFormat("yyyy-MM-dd");config.setCharset(Charset.forName("UTF-8"));config.setSerializerFeatures(SerializerFeature.WriteClassName,SerializerFeature.WriteMapNullValue,SerializerFeature.PrettyFormat,SerializerFeature.WriteNullListAsEmpty,SerializerFeature.WriteNullstringAsEmpty);converter.setFastJsonConfig(config);return converter;}
}

代码解释:

  • 自定义MyFastJsonConfig,完成对FastJsonHtpMessageConverter Bean的提供。
  • 第7~15行分别配置了JSON解析过程的一些细节,例如日期格式、数据编码、是否在生成的JSON中输出类名、是否输出value为null的数据、生成的JSON格式化、空集合输出[]而非null、空字符串输出""而非null等基本配置。

MyFastJsonConfig配置完成后,还需要配置一下响应编码,否则返回的JSON中文会乱码,在application.properties中添加如下配置:

spring.http.encoding.force-response=true

接下来提供BookController进行测试。BookController和上一小节一致,运行成功后,在浏览器中输入“http://ocalhost:8080/book”,即可看到运行结果,如图4-3所示。
在这里插入图片描述
对于FastJsonHttpMessageConverter的配置,除了上面这种方式之外,

还有另一种方式。
在Spring Boot项目中,当开发者引入spring-boot-starter-web依赖之后,该依赖又依赖了spring-boot-autoconfigure,在这个自动化配置中,有一个WebMvcAutoConfiguration类提供了对SpringMVC最基本的配置,如果某一项自动化配置不满足开发需求,开发者可以针对该项自定义配置,只需要实现WebMvcConfigurer接口即可代码如下:

Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters){FastJsonHttpMessageConverter converter= new FastJsonHttpMessageConverter();FastJsonConfig config = new FastJsonConfig();config.setDateFormat("yyyy-MM-dd");config.setCharset(Charset.forName("UTF-8"));config.setSerializerFeatures(SerializerFeature.WriteClassName,SerializerFeature.WriteMapNullValue,SerializerFeature.PrettyFormat,SerializerFeature.WriteNullListAsEmpty,SerializerFeature.WriteNullStringAsEmpty);converter.setFastJsonConfig(config);converters.add(converter);}
}

代码解释:

  • 自定义MyWebMvcConfig类并实现WebMvcConfigurer接口中的configureMessageConverters方法
  • 将自定义的FastJsonHttpMessageConverter加入converters中。

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

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

相关文章

24.4.17 驱动开发定时器作业,消抖

定时器消抖工作原理 在按键按下之后&#xff0c;进入中断处理函数&#xff0c;在中断处理函数中&#xff0c;定时时间10ms当定时时间到&#xff0c;执行定时器处理函数&#xff0c;在定时器处理函数中&#xff0c;读取管脚的电平状态如果读到的是低电平&#xff0c;表示按键按下…

刷题日记——质因数的个数

题目 分析&#xff08;从质数的判断角度出发&#xff09;&#xff08;递归&#xff09; 判断n是否是质数需要&#xff1a; 遍历&#xff0c;i从2开始到sqrt(n)&#xff0c;每次判断n是否能整除i&#xff0c;若能则不是质数&#xff0c;若不能则是 思路&#xff1a; 先判断n…

【MATLAB源码-第26期】基于matlab的FBMC/OQAM的误码率仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 FBMC&#xff08;Filter Bank Multicarrier&#xff09;是一种多载波调制技术&#xff0c;它采用滤波器组来处理频域内的子载波&#xff0c;以在有限带宽内实现高效的数据传输。OQAM&#xff08;Offset Quadrature Amplitude…

数据结构初阶:二叉树(一)

树概念及结构 树的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 有一个特殊的结点&a…

微前端 qiankun 框架接入问题记录

背景&#xff1a;需要搭建一个平台&#xff0c;这个平台的主要功能是集成各个子系统&#xff0c;方面对系统之间的统一管理。在搭建这样一个平台时&#xff0c;前端考虑使用微前端架构方式实现&#xff0c;使用的框架是 qiankun&#xff0c;本文主要记录在 qiankun 框架使用过程…

【Leetcode每日一题】 分治 - 颜色分类(难度⭐⭐)(57)

1. 题目解析 题目链接&#xff1a;75. 颜色分类 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路解析 本算法采用三指针法&#xff0c;将数组划分为三个区域&#xff0c;分别用于存放值为0、1和2的元素。通过…

Ubuntu修改DNS

【永久修改DNS】 临时修改DNS的方法是在 /etc/resolv.conf 添加&#xff1a;nameserver 8.8.8.8 nameserver 8.8.8.8 注意到/etc/resolv.conf最上面有这么一行&#xff1a; DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN 说明重启之后这个文件会被自动…

CTFHUB-技能树-Web前置技能-文件上传(无验证,JS前端验证,前端验证)

CTFHUB-技能树-Web前置技能-文件上传&#xff08;无验证&#xff0c;JS前端验证&#xff0c;前端验证—.htaccess&#xff09; 文章目录 CTFHUB-技能树-Web前置技能-文件上传&#xff08;无验证&#xff0c;JS前端验证&#xff0c;前端验证—.htaccess&#xff09;文件上传无验…

【在线OJ系统】自定义注解实现自增ID的无感插入

实现思路 首先自定义参数注解&#xff0c;然后根据AOP思想&#xff0c;找到该注解作用的切点&#xff0c;也就是mapper层对于mapper层的接口在执行前都会执行该aop操作&#xff1a;获取到对于的方法对象&#xff0c;根据方法对象获取参数列表&#xff0c;根据参数列表判断某个…

电商数据采集的网页抓取数据、淘宝、天猫、京东等平台的电商数据抓取|电商数据API接口网页爬虫、采集网站数据

电商数据采集的网页抓取数据、淘宝、天猫、京东等平台的电商数据抓取&#xff0c;网页爬虫、采集网站数据、网页数据采集软件、python爬虫、HTM网页提取、APP数据抓包、APP数据采集、一站式网站采集技术、BI数据的数据分析、数据标注等成为大数据发展中的热门技术关键词。那么电…

深入理解同步与异步编程及协程管理在Python中的应用

文章目录 1. 同步与异步函数的对比1.1 同步函数1.2 异步函数1.3 对比 2. 管理多个协程与异常处理2.1 并发执行多个协程2.2 错误处理2.3 任务取消 本文将探索Python中同步与异步编程的基本概念及其区别。还会详细介绍如何使用asyncio库来有效管理协程&#xff0c;包括任务的创建…

最新的网易星球GEC挖矿系统修复版 章鱼星球挖矿系统源码 区块链虚拟币交易源码 基于ThinkPHP5开发

区块链系统介绍 2018.12.10更新增加聚合数据短信接口 2018.11.19更新增加短信宝接口 2018.08.17修复Linux系统搭建验证码不显示问题 2018.08.09修复后台某处溢出数据库账号密码BUG 2018.08.06修复票卷BUG 源码介绍&#xff1a; 区块链系统中用户共九个等级&#xff0c;依…

旧衣服回收小程序,旧衣回收行业的必然发展趋势

近年来&#xff0c;旧衣回收行业成为了一个新型的创业项目&#xff0c;因其投资成本低、回报高的优势&#xff0c;也成为了当下年轻人的创业新选择。 一、旧衣服回收市场发展趋势 当下人们对衣物淘汰的速度逐渐加快&#xff0c;每年产生的废旧衣物高达百万吨&#xff0c;加之…

.cur 鼠标光标编辑器

详解透明贴图和三元光栅操作 - CodeBus 鼠标指针文件格式解析——Windows&#xff08;二&#xff09; (qq.com) [C/C] RGBA数组生成Windows下的ico文件_c ico格式-CSDN博客 色环设计 - CodeBus 左键绘制 右键选颜色 ctrl右键设置鼠标热点 F1导出.cur文件 //代码来源&…

【考研高数】学习笔记分享

派大星说数学&#xff08;导学部分&#xff09; 关于做题 测试 答疑阶段 直播 群内 高中基础知识导学 一、数与式 述了课程学习和因式分解、分式拆解等知识点。学生应了解课程内容&#xff0c;带着疑问听课&#xff0c;不要抄笔记&#xff0c;导学课和基础课都有测验&…

Zabbix监控Windows

1.在虚拟机中安装zabbix 安装系统一直托不进虚拟机中&#xff1b;因为没安装Tools组件 点击虚拟机&#xff0c;选择安装VMware Tools 2.配置zabbix

荣誉 | 人大金仓获评轨交行业“智慧运维优秀应用案例”

4月12日至13日&#xff0c;2024&#xff08;第八届&#xff09;中国城市轨道交通智慧运维大会在成都顺利举行。会上&#xff0c;人大金仓以其在轨交行业的卓越贡献和创新实践&#xff0c;获评“智慧运维优秀应用案例”。公司副总裁梁红凤出席大会并发表了题为“打造世界一流的数…

顺序表(增删减改)+通讯录项目(数据结构)+顺序表专用题型

什么是顺序表 顺序表和数组的区别 顺序表本质就是数组 结构体初阶进阶 系统化的学习-CSDN博客 简单解释一下&#xff0c;就像大家去吃饭&#xff0c;然后左边是苍蝇馆子&#xff0c;右边是修饰过的苍蝇馆子&#xff0c;但是那个好看的苍蝇馆子一看&#xff0c;这不行啊&a…

EcoVadis评估是什么?EcoVadis评估的步骤有哪些

EcoVadis评估是一种针对供应链中各个环节的环境和社会责任进行评估的工具。其评估范围广泛&#xff0c;涵盖了环境、劳工与人权、商业道德和可持续采购等多个领域。通过收集企业的公开信息、企业提供的数据和自我评估问卷等方式&#xff0c;EcoVadis能够为企业提供一个全面的可…

【智能排班系统】Quartz结合Cron-Utils自定义时间发送上班、休息提醒

文章目录 Quartz&#xff1a;强大的Java作业调度引擎Quartz概述核心概念与架构配置文件主配置&#xff08;配置主要调度器设置、事务&#xff09;线程池配置&#xff08;调整作业执行资源&#xff09;SimpleThreadPool特定属性自定义线程池 RAMJobStore配置&#xff08;在内存中…