Spring Boot实践API版本管理
基于Spring Boot 1.5.6 版本
原理
在SpringMVC中RequestMappingHandlerMapping是比较重要的一个角色,它决定了每个URL分发至哪个Controller。
Spring Boot加载过程如下,所以我们可以通过自定义WebMvcRegistrationsAdapter来改写RequestMappingHandlerMapping。
实现方式
ApiVersion.java
import org.springframework.web.bind.annotation.Mapping;
import java.lang.annotation.*;
/**
* Api版本注解
*
* @author wsh
* @version 1.0
* @date 2019/7/29
* @since JDK1.8
*/
@Mapping
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface ApiVersion {
/**
* version value
*
* @return version
*/
int value();
}
ApiVersionCondition.java
import lombok.extern.java.Log;
import org.springframework.web.servlet.mvc.condition.RequestCondition;
import javax.servlet.http.HttpServletRequest;
import java.util.regex.Match