【springboot】12、内容协商

导读:本篇文章讲解 【springboot】12、内容协商,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

基本介绍

根据客户端接收能力不同,SpringBoot 返回不同媒体类型的数据。
例如: 客户端 Http 请求头 Accept: 为application/xml 则返回 xml 数据,客户端 Http 请求头为Accept: application/json 则返回 json 数据

应用实例

环境准备

我们先创建一个简单的springboot架子,引入关于xml的依赖,后面会用到

        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>

然后创建一个People类

	@Data
	@NoArgsConstructor
	@AllArgsConstructor
	public class People {
	    private Integer id;
	    private String name;
	    private String gender;
	}

然后创建一个Controller

	@RestController
	public class ContentController {
	
	    @RequestMapping("/test")
	    public People people() {
	        return new People(1, "千束", "女");
	    }
	}

可以看见,上面的/test请求就会返回一个people,我们来请求一下

postman请求

我们使用postman请求该地址,返回的是json数据
在这里插入图片描述

网页请求

我们使用网页请求,返回的是xml的数据
在这里插入图片描述

原因

对于上面相同的请求返回结果不同,原因就是他们的Accept不同
在这里插入图片描述
在这里插入图片描述

可以发现,postman的Accept是*/,也就是支持所有的相应格式,而游览器是text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9,这个是有优先级的,q代表权重,可以发现xml在前面,所以我们的springboot就会优先返回xml的格式数据。
我们Debug下源码,在AbstractJackson2HttpMessageConverter类中的writeInternal方法中,可以通过Accept的不同,设置相应的Content-Type
在这里插入图片描述
我们通过postman请求,Accept是
/*,对应的Content-Type就是application/json

在这里插入图片描述

我们通过游览器请求,Accept是text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9,对应的Content-Type就是application/xhtml+xml
在这里插入图片描述

开启基于请求参数的内容协商功能

我们知道了可以通过控制请求的Accept来改变返回的格式,但是在poatman中可以设置Accept,在网页中却不能设置,这该怎么办呢?
很简单,我们只需要在配置文件中开启基于请求参数的内容协商功能
在这里插入图片描述
这样开启后,我们只需要在请求时带上format参数即可,format就是我们想要的返回格式,下面我们使用网页来进行测试,我们知道默认是返回xml,我们使用format指定json,看是否有效
在这里插入图片描述
可以发现,已经可以实现指定返回格式了。我们还可以自定义参数的名称,也就是不通过format指定,而是自己指定一个名称,例如我想叫做type,我们通过配置文件进行设置即可

在这里插入图片描述

再次请求,format已经失效了

在这里插入图片描述

使用type进行指定,没有问题

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74798.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!