java b2b2c shop 多使用者商城系統原始碼-Feign自定義註解翻譯器
阿新 • • 發佈:2018-12-19
一 新建自定義註解MyUrl
需要JAVA Spring Cloud大型企業分散式微服務雲構建的B2B2C電子商務平臺原始碼請加企鵝求求 :二一四七七七五六三三
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); } }