
在以往的 HTTP 调用中,调用方式经常将组装代码冗余到正常业务代码中,不够优雅,因此在接触到 Feign 后,考虑使其作为一个 HTTP 发送基础,来进行远程调用。
Feign ,搞定 HTTP 请求以springboot项目为例
1、引入依赖
org.springframework.cloud
spring-cloud-starter-openfeign
io.github.openfeign
feign-jackson
9.7.0
2、HTTP发送端
package com.example.xmldemo.feignService;
import com.example.xmldemo.result.Project1369CategoryTreeVo;
import com.example.xmldemo.result.ViewProjectReportParam;
import feign.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.http.HttpStatus;
import java.util.*;
public interface OutsideCallService {
@RequestLine("GET /api/biz/outside/uploadProjectInfo?zjlx={zjlx}&gnfl={gnfl}&jzmj={jzmj}&filePath={filePath}&fileId={fileId}")
Result uploadProjectInfo(@Param("zjlx") String zjlx, @Param("gnfl") String gnfl, @Param("jzmj") Double jzmj, @Param("filePath") String filePath, @Param("fileId") String fileId);
@RequestLine("GET /api/biz/outside/tree")
Result> tree();
@RequestLine("POST /api/biz/outside/post")
@Headers({"Content-Type: application/json"})
Result postBook2(ViewProjectReportParam bookVo);
@Data
@AllArgsConstructor
@NoArgsConstructor
class Result {
// HTTP Response Status Code
private HttpStatus httpStatus;
private Integer status;
// General Error message
private String message;
private Integer code;
// Error code
private String serviceStatus;
private Date timestamp = new Date();
private T data;
private T extendData;
}
}
3、测试
package com.example.xmldemo;
import com.example.xmldemo.feignService.OutsideCallService;
import com.example.xmldemo.result.Project1369CategoryTreeVo;
import com.example.xmldemo.result.ViewProjectReportParam;
import feign.Feign;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import java.util.List;
public class FeignTest {
@Test
public void test1(){
OutsideCallService target = Feign.builder()
.decoder(new JacksonDecoder())
.encoder(new JacksonEncoder())
.target(OutsideCallService.class, "http://localhost:8889");
OutsideCallService.Result tree = target.uploadProjectInfo("002008001","001001001001002",122d,"http://localhost:8987/download","22222");
Long data = tree.getData();
System.out.println(data);
}
@Test
public void test2(){
OutsideCallService target = Feign.builder()
.decoder(new JacksonDecoder())
.encoder(new JacksonEncoder())
.target(OutsideCallService.class, "http://localhost:8889");
OutsideCallService.Result> tree = target.tree();
List children = tree.getData();
System.out.println(children);
}
@Test
public void test3(){
OutsideCallService target = Feign.builder()
.decoder(new JacksonDecoder())
.encoder(new JacksonEncoder())
.target(OutsideCallService.class, "http://localhost:8889");
ViewProjectReportParam viewProjectReportParam = new ViewProjectReportParam();
viewProjectReportParam.setProjectId(23233L);
viewProjectReportParam.setType(232);
OutsideCallService.Result tree = target.postBook2(viewProjectReportParam);
ViewProjectReportParam data = tree.getData();
System.out.println(data);
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)