本次使用的组件openfeign
一.应用:
*业务需求调用远端HTTP地址(本文主要主要记录)
1.初始化Feign
*请求方式-本文采用okhttp3
*请求值序列化编码-JSON
*参数映射成对象
*返回值解码序列化-JSON
*请求前拦截器
*实际请求路径对象
@Bean
public ZgaConsoleApi zgaConsoleApiService(okhttp3.OkHttpClient httpClient) {
ZgaConsoleApi target = Feign.builder().client(new OkHttpClient(httpClient)).encoder(new JacksonEncoder()).queryMapEncoder(
new BeanQueryMapEncoder()).decoder(new JacksonDecoder(Lists.newArrayList(getSimpleModule()))).requestInterceptor(
new ZgaFeignHeaderInterceptor()).target(ZgaConsoleApi.class, zgaUrl);
return target;
}
private SimpleModule getSimpleModule() {
SimpleModule module = new SimpleModule();
module.addDeserializer(Date.class, new JsonDateDeserializer());
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
objectMapper.registerModule(module);
return module;
}
public static class JsonDateDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
format2.setTimeZone(TimeZone.getTimeZone("UTC"));
String date = p.getText();
try {
return format.parse(date);
} catch (ParseException e) {
try {
return format2.parse(date);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}
}
public interface ZgaConsoleApi {
/**
* ---------------------------- instance
*/
@RequestLine("GET /version")
@Headers({ZgaConsoleConstant.CRS_CID + ":{cid}"})
ResultInfo<HashMap<String, String>> test();
}
请求方式:
@Resource
private ZgaConsoleApi zgaConsoleApi;
public void thisTest() {
ResultInfo<HashMap<String, String>> test = zgaConsoleApi.test();
System.out.println(test);
}
*spring cloud项目使用Feign进行服务间调用
2.原理