Nami 过滤器，有两种作用域的使用方式。

* （接口）自身过滤器（仅对当前接口有效）
* 全局过滤器（对所有接口有效）


### 1、自身过滤器

为当前接口，添加专属过滤器。在声明式 HttpClient 体验中，非常有价值；方便为不同站点指定编码等过滤策略。

```java
@NamiClient(url="http://localhost:8080/ComplexModelService/")
public interface IComplexModelService extends Filter{
    //实际请求为：PUT http://localhost:8080/ComplexModelService/save
    @NamiMapping("PUT")
    void save(@NamiBody ComplexModel model);
    
    //实际请求为：GET http://localhost:8080/ComplexModelService/api/1.0.1?modelId=xxx
    @NamiMapping("GET api/1.0.1")
    ComplexModel read(Integer modelId);
    
    //自带个过滤器，过滤自己：） //要用 default 直接实现代码！！！
    default Result doFilter(Invocation inv) throws Throwable{
        inv.headers.put("Token", "Xxx");
        inv.headers.put("TraceId", Utils.guid());
        inv.config.setDecoder(SnackDecoder.instance);
        inv.config.setEncoder(SnackEncoder.instance);

        return inv.invoke();
    }
}
```


### 2、全局过滤器

* 使用组件注解

```java
@Component
public class NamiFilterImpl implements org.noear.nami.Filter {
    @Override
    public Result doFilter(Invocation inv) throws Throwable {
        inv.headers.put("Token", "Xxx");
        inv.headers.put("TraceId", Utils.guid());
        inv.config.setDecoder(SnackDecoder.instance);
        inv.config.setEncoder(SnackEncoder.instance);

        return inv.invoke();
    }
}
```


* 使用手动注册（要注意时机，在 Nami 使用前完成注册）


```java
NamiManager.reg(inv -> {
        inv.headers.put("Token", "Xxx");
        inv.headers.put("TraceId", Utils.guid());
        inv.config.setDecoder(SnackDecoder.instance);
        inv.config.setEncoder(SnackEncoder.instance);

        return inv.invoke();
});
```