Spring Boot ContentNegotiation 内容协商

  • Post author:
  • Post category:其他




ContentNegotiation 内容协商



作用

当我们访问一个 Controller 时返回值一般都采用 RESTful 风格 也就是返回 json 格式,内容格式可以为同一个 Url 返回多种不同的结果,如 xml 等。

Spring-Boot 默认禁止后缀匹配模式



通过指定返回值类型获取指定类型的返回值


使用

根据例子来感受一下

新建一个Controller

@RestController
public class TestContentNegotiation {

   @GetMapping("/projects/spring-boot")
   public User testContentNegotiation() {
      return new User("张三","123456");
   }
}

Pojo User

@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class User {
	private String name;
	private String studentNumber;
}

启动spring boot

通过 get 访问,可见结果返回的是json类型

在这里插入图片描述

在这里插入图片描述

尝试获取 xml 返回值

Spring Boot 默认规定 通过

?format=...

方式获取不同的返回值



配置

首先需要开启 Spring Boot 对内容协商的支持

application.properties

# 开启内容协商
spring.mvc.contentnegotiation.favor-parameter=true

添加 jackson 对 xml 的支持

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


Tip

因为Spring Boot 默认继承Jackson 所以不需要添加

jackson-core

的依赖

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
</dependency>

获取xml返回值

在这里插入图片描述

当然了,format=json 依然可以获取 json 返回值



自定义内容协商key名称


format

key 是 spring boot 默认提供的,可以根据自己的需求进行更改。

如下面的例子

spring.mvc.contentnegotiation.parameter-name=custom

将key更改为

custom

# 开启内容协商
spring.mvc.contentnegotiation.favor-parameter=true
# 自定义参数默认(format)
spring.mvc.contentnegotiation.parameter-name=custom

测试

Ok, 可以正常获取 xml 类型的返回值

在这里插入图片描述



自定义返回类型

可以自行设置返回类型的别名 也就是 format=value 的value值

在 application.properties 中添加

spring.mvc.contentnegotiation.media-types.apple=text/xml

此时通过 format = apple 也可以返回 xml 类型的值

在这里插入图片描述

当传递key值时,返回值的类型,受请求头 Accept 的影响

当Accept 添加 application/xml 时 返回 xml 数据类型

在这里插入图片描述

当 Accept 添加 application/json 时 返回 json 数据类型

在这里插入图片描述




后缀名模式

Spring Boot 官方:不推荐使用后缀模式匹配,将在未来的版本中删除。

如果你理解这些警告,并且仍然希望你的应用程序使用后缀模式匹配,下面的配置是必需的:

spring.mvc.contentnegotiation.favor-path-extension=true
spring.mvc.pathmatch.use-suffix-pattern=true

测试

获取 json 返回值

在这里插入图片描述

获取 xml 返回值

在这里插入图片描述



版权声明:本文为qq_37175706原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。