nami - 使用过滤器个性化定制
2026年4月13日 上午9:54:03
Nami 过滤器,有两种作用域的使用方式。
- (接口)自身过滤器(仅对当前接口有效)
- 全局过滤器(对所有接口有效)
1、自身过滤器
为当前接口,添加专属过滤器。在声明式 HttpClient 体验中,非常有价值;方便为不同站点指定编码等过滤策略。
@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、全局过滤器
- 使用组件注解
@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 使用前完成注册)
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();
});