Spring Controller接口地址的骚玩法,很有用!

一,背景

项目里有一个接口需要对外提供,对方的解析方式有不同的方式,一个是使用流行的json格式,另外一个却是老系统,只能用xml格式,但是接口内部的实现逻辑是完全一样的,为了适配更多调用方的需求,就需要将同样的接口数据用两种格式提供出去,总觉得哪儿不对劲儿,写了不好的代码。刚好发现Spring 5.3之后 之后出现的一个新特性——路径后缀匹配,可以支持同一个接口,根据调用方的需求,自动做转换。

二,实现步骤

1,确认当前使用的Spring的版本是5.3及之后的
2,如果是5.3x版本,需要配置

spring:

 mvc:

   contentnegotiation:

     favor-path-extension: true

3,如果是6.x版本可以直接实现 WebMvcConfigurer
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


@Component
public class PathWebMvcConfigurer implements WebMvcConfigurer {
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        // 开启路径后缀功能
        configurer.favorPathExtension(true) ;
    }
}
4,定义一个接口, 路径中使用.*来做后缀, fmt这段可以随意命名
    @GetMapping("/{name}/fmt.*")
    @ResponseBody
    public Object p1(@PathVariable String name) {
        List<User> userList =  userService.list();
        return userList.stream().filter(u -> name.equals(u.getName()) ).collect(Collectors.toList()) ;
    }
5,默认是支持json格式的,如果需要支持xml,需要引入
<dependency>
	<groupId>com.fasterxml.jackson.dataformat</groupId>
	<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
6, 请求json格式的结果

7, 请求xml格式的结果

如果对你有帮助,记得点赞关注哟!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

东皋长歌

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

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

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

打赏作者

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

抵扣说明:

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

余额充值