Spring-cloud-openfeign-Main方法调用原生API发送HTTP请求

📅 2026/8/13 21:58:03
Spring-cloud-openfeign-Main方法调用原生API发送HTTP请求
本文的内容适用于公司网络有问题或者同事环境有问题不能通过FeignClient注解使用feign的情况不喜欢okhttp或者apache client或者java原生io或者其他http工具步骤GET请求POST请求GET请求依旧定义feign接口但是并没有使用FeignClient注解importfeign.Body;importfeign.HeaderMap;importfeign.Param;importfeign.RequestLine;importjava.util.Map;publicinterface MyFeign{// 根据人员id查询人员详情RequestLine(GET /user/detail?id{userId})StringgetUserDetail(Param(userId)String userId,HeaderMap MapString,Stringheaders);}RequestLinefeign固定写法 GETfeign固定写法表示发送GET请求 /user/detail我要调用的接口路径servlet path {userId}双侧大括号为feign约定写法表示大括号内的词一定在方法入参中存在feign会从方法入参中取该值然后替换掉{userId} Param(userId)feign约定写法同上一定是和双侧大括号一一对应的 HeaderMapHttp请求头如果不需要删掉headers参数就行main方法直接发送上述get请求MyFeign feignClientFeign.builder().target(MyFeign.class,https://对方域名);String resultfeignClient.getUserDetail(123,newHashMap());System.out.println(result);// 打印对方返回值POST请求定义feign接口但是并没有使用FeignClient注解publicinterface MyFeign{// 根据人员id查询人员详情RequestLine(POST /user/detail)Body({body})StringgetUserDetail(Param(valuebody,expanderMediaTypeByJsonExpander.class)User user,HeaderMap MapString,Stringheaders);}RequestLinefeign固定写法 POSTfeign固定写法表示发送POST请求 /user/detail我要调用的接口路径servlet path Body({body}) 双侧大括号为feign约定写法表示大括号内的词一定在方法入参中存在feign会从方法入参中取该值然后替换掉{body} value body表示将user赋值到{body}中但是怎么赋值由expander决定 expander MediaTypeByJsonExpander.class因为http请求body不能是对象所以expander就是用来处理如何将user对象转换成字符串后文有介绍 HeaderMapHttp请求头如果不需要删掉headers参数就行定义expanderimportcom.alibaba.fastjson.JSON;importfeign.Param;publicclassMediaTypeByJsonExpanderimplements Param.Expander{// 媒体类型为application/json的post请求现在最常用// 所以这里假设只处理json数据value是上述接口// getUserDetail的user入参这里相当于把user转换成json字符串OverridepublicStringexpand(Object value){returnJSON.toJSONString(value);}}发送POST请求同GET请求MyFeign feignClientFeign.builder().target(MyFeign.class,https://对方域名);User usernewUser();user.setId(123);String resultfeignClient.getUserDetail(user,newHashMap());System.out.println(result);// 打印对方返回值