Skip to content

Java Spring Boot 给 Controller 添加统一路由前缀

创建 spring boot 项目之后新增 controller

java
package com.zhengxin.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class IndexController {
    @GetMapping("/")
    public String helloWorld() {
        return "hello world !";
    }
}

默认启动之后,浏览器访问 / 目录就能够得到 hello world ! 内容。

方法一:统一增加

application.yml

yml
server:
  servlet:
    context-path: /api/v1

该方案会将所有的路由都增加一个前缀,现在需要访问 /api/v1/ 才能得到之前的内容

方案二:注解添加

在做项目的时候,一般会有很多个模块与版本,最好是分别控制。

1、新增接口注解

java
package com.zhengxin.annotation;

import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;

import java.lang.annotation.*;

/**
 * controller 层统一使用该注解
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RestController
public @interface ApiV1RestController {
    @AliasFor(annotation = Controller.class)
    String value() default "";
}

2、注册接口注解至 spring mvc

java
package com.zhengxin.config;

import com.zhengxin.annotation.ApiV1RestController;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 配置统一的后台接口访问路径的前缀
 */
@Configuration
public class CustomWebMvcConfig implements WebMvcConfigurer {

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.addPathPrefix("/api/v1", c -> c.isAnnotationPresent(ApiV1RestController.class));
    }
}

3、使用 ApiV1RestController 代替默认的 RestController 创建视图

java
package com.zhengxin.controller;

import com.zhengxin.annotation.ApiV1RestController;
import org.springframework.web.bind.annotation.GetMapping;

@ApiV1RestController
// @RestController
public class AppIndexController {
    @GetMapping("/")
    public String index() {
        return "Api home";
    }
}