springboot调用外部接口常用的方式

springboot调用外部接口常用的方式

在系统开发过程中,免不了要去调用第三方接口,springboot为我们提供了几种调用第三方接口的方法

1、使用原始httpClient请求

<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.4.1</version>
        </dependency>
public static JSONObject doPost(JSONObject date) {
    String assessToken="";
    CloseableHttpClient client = HttpClients.createDefault();
    // 要调用的接口url
    String url = "http://127.0.0.1:8080 /submit";
    HttpPost post = new HttpPost(url);
    JSONObject jsonObject = null;
    try {
        //创建请求体并添加数据
        StringEntity s = new StringEntity(date.toString());
        //此处相当于在header里头添加请求头等参数
        s.setContentType("application/json");
        s.setContentEncoding("UTF-8");
        post.setEntity(s);
        //此处相当于在Authorization里头添加Bear token参数信息
        post.addHeader("Authorization", "Bearer " +assessToken);
        HttpResponse res = client.execute(post);
        String response1 = EntityUtils.toString(res.getEntity());
        if (res.getStatusLine()
                .getStatusCode() == HttpStatus.SC_OK) {
            // 返回json格式:
            String result = EntityUtils.toString(res.getEntity());
            jsonObject = JSONObject.parseObject(result);
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    return jsonObject;
}

2、使用RestTemplate请求

1、get请求
/**
** 入参 请求的url、响应体类型
*/
RestTemplate restTemplate=new RestTemplate();
    UriComponents
            uriComponents= UriComponentsBuilder.fromUriString("http://127.0.0.1:8080/user?name={name}")
            .build()
            .expand("jpl")
            .encode();
    URI uri=uriComponents.toUri();
    String body = restTemplate.getForEntity(uri, String.class).getBody();

/**
** 入参 请求的url、响应体类型、请求体的参数
*/
RestTemplate restTemplate=new RestTemplate();
        Map params=new HashMap<>();
        params.put("name","dada"); //
        ResponseEntity responseEntity = restTemplate.getForEntity("http://127.0.0.1:8080/user?name={name}", String.class, params);
2、post请求
public String submit(String documentId){
    String assessToken="";
    RestTemplate restTemplate = new RestTemplate();
    //创建请求头
    HttpHeaders httpHeaders = new HttpHeaders();
    //此处相当于在Authorization里头添加Bear token参数信息
    httpHeaders.add(HttpHeaders.AUTHORIZATION, "Bearer " + assessToken);
    //此处相当于在header里头添加content-type等参数
    httpHeaders.add(HttpHeaders.CONTENT_TYPE,"application/json");
    Map<String, Object> map = (Map<String, Object>) new HashMap<>().put("documentId", JSONObject.parse(documentId));
    String jsonStr = JSON.toJSONString(map);
    //创建请求体并添加数据
    HttpEntity<Map> httpEntity = new HttpEntity<Map>(map, httpHeaders);
    String url = "http://127.0.0.1:8080/submit";
    ResponseEntity<String> forEntity = restTemplate.postForEntity(url,httpEntity,String.class);//此处三个参数分别是请求地址、请求体以及返回参数类型
    return forEntity.toString();
}

3、使用Feign请求

fegin常见咋微服务中使用,这里就不过多介绍

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
    <version>1.2.2.RELEASE</version>
</dependency>

简单介绍一下如果使用feign遇到需要添加请求头等信息时,遇到重写feign的apply方法

@Configuration
public class FeignConfig implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        //添加token
        requestTemplate.header("token", "");
    }
}

4、小结

RestTemplate、HTTPClient 和 Feign 都是 Java 中用于发送 HTTP 请求的工具,它们都可以用于构建 HTTPRestful API。以下是它们的优缺点:

RESTTemplate
优点:

RestTemplate 简单易用,支持自定义配置,可以更好地满足业务需求。
RestTemplate 可以处理 HTTP 请求和响应,实现对 HTTP 请求和响应的拦截、代理、拦截等功能。
缺点:

RestTemplate 的功能较为复杂,需要手动实现请求体、请求头、响应体、响应头等自定义配置,因此需要一定的编程经验和技能。
RestTemplate 默认情况下使用 Apache HTTP 库,因此在处理 HTTP 请求时,可能对某些业务场景不太友好,需要手动配置。
HTTPClient
优点:

HTTPClient 简单易用,支持多种 HTTP 库,可以更好地满足不同的业务需求。
HTTPClient 可以处理 HTTP 请求和响应,实现对 HTTP 请求和响应的拦截、代理、拦截等功能。
缺点:

HTTPClient 默认情况下使用 Apache HTTP 库,因此在处理 HTTP 请求时,可能对某些业务场景不太友好,需要手动配置。
HTTPClient 的性能可能不如 RestTemplate 。
Feign
优点:

Feign 是 Java 中的 HTTP客户端,可以支持多种 HTTP 库,可以更好地满足不同的业务需求。
Feign 可以实现自定义的请求拦截、响应拦截、请求体拦截、响应体拦截等功能,因此可以更好地满足业务需求。
Feign 内置了丰富的验证和认证功能,可以支持自定义的验证和认证规则。
缺点:

Feign 的功能较为复杂,需要手动实现请求拦截、响应拦截、请求体拦截、响应体拦截、验证和认证等功能,因此需要一定的编程经验

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot可以通过RestTemplate或Feign Client调用外部接口。 1. RestTemplate RestTemplate是Spring提供的用于调用RESTful服务的客户端。它可以发送HTTP请求并处理响应。使用RestTemplate需要在Spring Boot项目中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency> ``` 使用RestTemplate发送GET请求: ```java RestTemplate restTemplate = new RestTemplate(); String url = "http://localhost:8080/api/users"; String response = restTemplate.getForObject(url, String.class); ``` 使用RestTemplate发送POST请求: ```java RestTemplate restTemplate = new RestTemplate(); String url = "http://localhost:8080/api/users"; User user = new User("John", "Doe"); User response = restTemplate.postForObject(url, user, User.class); ``` 2. Feign Client Feign是一个声明式、模板化的HTTP客户端,可以与Spring Boot无缝集成。使用Feign需要在Spring Boot项目中添加以下依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` 定义Feign客户端接口: ```java @FeignClient(name = "user-service") public interface UserServiceClient { @GetMapping("/api/users/{id}") User getUser(@PathVariable("id") Long id); @PostMapping("/api/users") User createUser(@RequestBody User user); } ``` 使用Feign客户端调用外部接口: ```java @Autowired private UserServiceClient userServiceClient; public User getUser(Long id) { return userServiceClient.getUser(id); } public User createUser(User user) { return userServiceClient.createUser(user); } ``` 以上是Spring Boot调用外部接口的两种方式,根据实际情况选择合适的方式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳关的美好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值