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";
}
}