当前位置:   article > 正文

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

springboot xml

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.../>元素。
  • 1
  • 2
  • 3
  • 4
  • 5

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>
  • 1
  • 2
  • 3
  • 4
  • 5

效果如图:

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


配置文件:

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

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

在这里插入图片描述


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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

测试:

跟用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
  • 1
  • 2
  • 3

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


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


代码演示:


改成 json b 的依赖库

在这里插入图片描述


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


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/619839
推荐阅读
相关标签
  

闽ICP备14008679号