57、 SpringBoot 基于XML的RESTful服务---XML格式RESTful响应及更换默认的JSON库(三种JSON库的支持: Json 、 Gson、JSON-B,都是Json解析器)

SpringBoot 基于XML的RESTful服务—XML格式RESTful响应及更换默认的JSON库


Spring Boot内置了如下三种JSON库的支持:

Jackson(默认, 功能强大的JSON库,包含在spring-boot-starter-web 这个包里面了,有 jackson 的依赖了)

Gson (Google)

JSON-B

都是 Json 解析器,功能都是把数据转换成json格式。都是用来生成JSON响应、处理JSON格式的请求参数的解析器。


基于 XML 的 RESTful 服务(Jackson)

Spring Boot提供了内容协商支持,默认(且优先)会根据Accept请求头来生成对应的响应。

Accept 请求头为 application/json ,则生成JSON响应
Accept 请求头为 application/xml , 则生成XML响应

控制器的方法只是返回数据(Java对象、集合)—> 通过 HttpMessageConverter 实现-------> JSON或XML

将 spring.mvc.contentnegotiation.favor-parameter 设为 true,可启用使用额外的format请求参数指定响应类型。

也可强制启用通过URL后缀来指定响应类型(这种方式已过时)。

换而言之,无论是生成JSON响应也好,还是生成XML响应也好,都需要有具体的转换器(HttpMessageConverter实现类)

Spring Boot 的 starter-web 默认会依赖 Jackson —— 功能强大的JSON库。

为了让Spring Boot将控制器返回的方法能转换成XML响应,必须添加对应XML格式化器(HttpMessageConverter实现类)

Spring Boot 之所以默认可以将控制器返回的方法能转换成JSON响应,是因为它默认依赖Jackson库

Spring Boot 内置了两种XML库的支持来让RESTful服务生成XML响应:

1、使用 jackson-dataformat-xml的 XML绑定。

2、使用JDK自带的JAXB的XML绑定。

jackson-dataformat-xml 会自动将Java对象序列化为同名的XML元素,比如

 Book对象序列化为<Book.../>元素,
 
 Collection对象序列化为<Collection.../>元素,
 
 List对象序列序列化为<List.../>元素。

JAXB 需要使用@XmlRootElement、@XmlElement注解来指定将Java对象序列化为哪个XML元素,
因此JAXB处理起来比较麻烦,推荐使用基于jackson-dataformat-xml的XML绑定。


【总结:】 生成XML响应和生成JSON响应程序上没有任何区别,程序的控制器方法始终返回的只是数据(集合、Java对象),最终都是用Spring通过(HttpMessageConverter将数据转换成JSON响应或XML响应。


唯一的区别在于:Spring Boot的spring-boot-starter-web默认就依赖了JSON转换库(Jackson),但Spring Boot默认没有依赖XML转换器,因此需要手动在pom.xml中添加它。


代码演示

上一篇:56、springboot ------ RESTful服务及RESTful接口设计
代码是上一篇基础上修改的。


需求:

演示响应为 xml 格式,通过请求的时候修改 Accept请求头来生成对应的响应,
Accept请求头为application/xml则生成XML响应


添加依赖

只需要添加这个依赖
在这里插入图片描述

        <!-- 添加 Jackson format XML , 用于对象与XML之间的转换 -->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>

效果如图:

执行 Accept 请求头为 xml ,响应的格式就为 xml 。
在这里插入图片描述


配置文件:

如图:通过添加配置启用额外的format请求参数指定响应类型。
就是在访问方法后面添加 ?format=json/xml 响应类型

#启用额外的format请求参数指定响应类型。
spring.mvc.contentnegotiation.favor-parameter=true

在这里插入图片描述


Gson支持

都是 Json 解析器,功能都是把数据转换成json格式。
都是用来生成JSON响应、处理JSON格式的请求参数的解析器。

如要使用Gson作为JSON解析库,只要在从依赖配置中排除spring-boot-starter-json,并添加Gson依赖库即可。

只要检测到类加载路径中包含了Gson库,Spring Boot将会自动配置一个Gson Bean,该Bean负责为Gson提供自动配置支持


Spring Boot为Gson提供了如下常用的配置属性:

spring.gson.pretty-printing:是否将JSON字符串执行格式化。

spring.gson.date-format:指定日期的序列化格式。比如yyyy-MM-dd。

spring.gson.serialize-nulls:指定是否序列化null值。

spring.gson.disable-html-escaping:指定是否禁用HTML转义。

spring.gson.disable-inner-class-serialization:指定是否禁用内部类序列化。

spring.gson.enable-complex-map-key-serialization:指定是否对复合的Map key启用序列化。


代码演示 Gson


添加依赖

排除掉原先的 json ,然后使用 gson库

在这里插入图片描述


添加配置

只是在 application.properties 配置文件中添加这里配置

#启用额外的format请求参数指定响应类型。
spring.mvc.contentnegotiation.favor-parameter=true
#指定日期的序列化格式
spring.gson.date-format=yyyy-MM-dd
#输出格式化良好的json数据,项目部署的时候,就设置为false,节省带宽
spring.gson.pretty-printing=true
#指定是否对复合的Map key启用序列化
spring.gson.enable-complex-map-key-serialization=true

测试:

跟用json没啥区别,都是将数据转成json格式。
都是 Json 解析器,功能都是把数据转换成json格式。
在这里插入图片描述


JSON-B支持

都是 Json 解析器,功能都是把数据转换成json格式。
都是用来生成JSON响应、处理JSON格式的请求参数的解析器。

如要使用JSON-B作为JSON解析库,只要在从依赖配置中排除spring-boot-starter-json,并添加JSON-B的API和实现库即可。
需要3个JAR包:

- JSON API
- JSON Bind API
- johnzon Jsonb

只要检测到类加载路径中包含了JSON-B的API和实现库,Spring Boot将会自动配置一个Jsonb Bean。


【结论】
如果要生成JSON响应、处理JSON格式的请求参数,其实用Spring Boot推荐的JACKSON就可以了。
此处教的是可以更换JSON的解析器,但并不推荐你这么干。


代码演示:


改成 json b 的依赖库

在这里插入图片描述


跟上面的没什么两样,都是能实现json格式的转化,不过此时的转化,是由 JSON-B 解析器 支持的
在这里插入图片描述


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot是一个基于Spring框架的快速开发框架,它提供了很多便捷的配置和快速的开发环境。在Spring Boot中,我们可以使用@RestController注解来创建一个RESTful风格的Web服务,它支持返回JSON格式的数据。 JSON是一种轻量级的数据交换格式,由于其简单、易读、易解析的特点,被广泛应用于Web应用程序中。在Spring Boot中,我们可以通过以下步骤来实现JSON数据格式化: 1. 导入相关依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` 2. 创建一个Controller类 在Controller类中定义一个返回JSON格式数据的接口,例如: ``` @RestController @RequestMapping("/user") public class UserController { @GetMapping("/{id}") public User getUser(@PathVariable Long id) { User user = new User(); user.setId(id); user.setName("张三"); user.setAge(20); return user; } } ``` 其中,@RestController注解表示该类是一个RESTful风格的控制器类,@RequestMapping注解表示请求的路径为"/user",@GetMapping注解表示该接口是一个GET请求。 3. 创建一个实体类 在实体类中定义需要返回的数据,例如: ``` public class User { private Long id; private String name; private Integer age; // getter和setter方法省略 } ``` 4. 测试接口 启动应用程序,并访问"http://localhost:8080/user/1",可以看到返回的数据是一个JSON格式的字符串,例如: ``` {"id":1,"name":"张三","age":20} ``` 以上就是基于Spring Boot框架实现JSON数据格式化的过程。通过使用@RestController注解,我们可以快速地创建一个RESTful风格的Web服务,并返回JSON格式的数据,从而方便地与前端进行数据交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值