3.4.0 后支持

---

接口版本通过两部分实现：

* 声明部分：版本声明与注册到路由器（通过 `@Mapping(version)` 注解声明）
* 路由部分：请求时，由过滤器分析出版本号；路由器匹配后执行处理


版本不一定是版本号，也可以是某种媒体类型。

### 1、配置

配置版本过滤器

```java
@Configuration
public class VersonConfig {
    @Bean
    public Filter filter() {
        return new VersionFilter().useHeader("Api-Version");
    }
}
```


### 2、应用示例

应用

```java
@Mapping("/demo/api")
@Controller
public class VersionController {
    @Mapping(version = "1.0")
    public String v1() {
        return "v1.0";
    }

    @Mapping(version = "2.0")
    public String v2() {
        return "v2.0";
    }
}
```

单元测试

```java
@SolonTest(App.class)
public class VersionTest extends HttpTester {
    @Test
    public void case1() throws IOException {
        assert path("/demo2/api").header("Api-Version","1.0").get().contains("v1.0");
    }

    @Test
    public void case2() throws IOException {
        assert path("/demo2/api").header("Api-Version","2.0").get().contains("v2.0");
    }
}
```


### 3、VersionResolver 接口及实现

```java
public interface VersionResolver {
    /**
     * 版本分析
     *
     * @param ctx 上下文
     */
    String versionResolve(Context ctx);
}
```

内置版本分析器参考（更丰富的，可以定制）：


| 分析器                            | 描述                      |  
| -------------------- | --------------- | 
| PathVersionResolver        | 基于 path 分析        | 



