在定义的接口前加前缀路径

前因

在一个服务中,既定义了app端接口,又定义了pc端接口,为了方便区分,可以在项目里建立一个名为"app"、"pc"的文件夹,分别为app、pc提供接口。当app和pc接口一致时,写完一端接口后,可以直接拷贝到另一文件夹,直接使用。但当不加前缀的情况下,因接口定义一致,会出现异常。这时候在接口前添加前缀,就可以解决这个问题。

实现步骤

  • 定义一个配置类,实现WebMvcConfigurer,重写configurePathMatch方法,指定添加前缀
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@AutoConfiguration
public class MyWebAutoConfiguration implements WebMvcConfigurer {
    public void configurePathMatch(PathMatchConfigurer configurer) {
        AntPathMatcher antPathMatcher = new AntPathMatcher(".");
        configurer.addPathPrefix("/app-api", (clazz) -> {
            return clazz.isAnnotationPresent(RestController.class) && antPathMatcher.match("**.example.my_2024_demo.ctrl.app.**", clazz.getPackage().getName());
        });
        configurer.addPathPrefix("/pc-api", (clazz) -> {
            return clazz.isAnnotationPresent(RestController.class) && antPathMatcher.match("**.example.my_2024_demo.ctrl.pc.**", clazz.getPackage().getName());
        });
    }
}
  • ctrl 接口定义文件目录如下图,与上一步指定路径相对应
    在这里插入图片描述
    代码
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AppTestCtrl {

    @GetMapping("/test")
    private String test(HttpServletRequest request) {
        request.setAttribute("name", "用于测试信息");
        return "app test";
    }
    
}
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PcTestCtrl {

    @GetMapping("/test")
    private String test(HttpServletRequest request) {
        request.setAttribute("name", "用于测试信息");
        return "pc test";
    }
}
  • 接口访问
    pc端:http://localhost:8080/pc-api/test
    效果
    在这里插入图片描述

app端:http://localhost:8080/app-api/test
效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值