本篇内容主要讲解“Feign怎么自定义注解翻译器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Feign怎么自定义注解翻译器”吧!
Feign自定义注解翻译器
新建自定义注解MyUrl
package org.crazyit.cloud.contract; import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target; //这个注解只能定义方法@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface MyUrl { //为注解配置两个属性 String url(); String method();}
新建接口,使用MyUrl注解
package org.crazyit.cloud.contract; public interface ContractClient { @MyUrl(url = "/hello", method = "GET") public String hello();}
定义注解翻译器
package org.crazyit.cloud.contract; import java.lang.annotation.Annotation;import java.lang.reflect.Method; import feign.Contract.BaseContract;import feign.MethodMetadata; public class MyContract extends BaseContract { @Override protected void processAnnotationOnClass(MethodMetadata data, Class<?> clz) { // 处理类级别注解 } @Override protected void processAnnotationOnMethod(MethodMetadata data, Annotation annotation, Method method) { // 注解是MyUrl类型的,才处理 if(MyUrl.class.isInstance(annotation)) { MyUrl myUrl = method.getAnnotation(MyUrl.class); String url = myUrl.url(); String httpMethod = myUrl.method(); data.template().method(httpMethod); data.template().append(url); } } @Override protected boolean processAnnotationsOnParameter(MethodMetadata data, Annotation[] annotations, int paramIndex) { // 处理参数级别注解 return false; } }
测试类
package org.crazyit.cloud.contract; import org.crazyit.cloud.jaxrs.RsClient; import feign.Feign;import feign.jaxrs.JAXRSContract; public class ContractMain { public static void main(String[] args) { ContractClient client = Feign.builder() .contract(new MyContract()) .target(ContractClient.class, "http://localhost:8080"); String result = client.hello(); System.out.println(result); } }
启动服务类
测试
Hello World
Feign注解说明
Feign是常用的微服务rpc调用框架,下面对一些注解说明
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inheritedpublic @interface FeignClient { @AliasFor("name") String value() default ""; @Deprecated String serviceId() default ""; String contextId() default ""; @AliasFor("value") String name() default ""; String qualifier() default ""; String url() default ""; boolean decode404() default false; Class<?>[] configuration() default {}; Class<?> fallback() default void.class; Class<?> fallbackFactory() default void.class; String path() default ""; boolean primary() default true;}
到此,相信大家对“Feign怎么自定义注解翻译器”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!