java后端请求第三方接口并处理HttpEntity类转换成实体类对象

  最近在写使用java后端去请求第三方接口的代码,给大家分享关于HttpEntity类的处理方式,而处理请求是需要根据第三方的要求来处理的,所以这里着重展示HttpEntity的处理。

  在开始代码前,需要知晓几个前提:

  1. 第三方接口已经开放,并且已经获得使用的权限
  2. 应经拿到接口的数据,包括需要传入的参数和返回值

  首先展示我这个文档需要用到的接口参数和返回值,我将用这个接口来进行演示
在这里插入图片描述
在这里插入图片描述
  然后需要导入几个jar包,这里我只做简单的演示,没涉及到具体的功能,所以需要的jar包不多

        <!-- 阿里的json工具包 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.68</version>
        </dependency>
        <!-- http请求工具 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.12</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.13</version>
        </dependency>

  其次,根据返回值构建DTO实体类,这个实体类的结构必须按照返回值来构建,否则在转换时会失败

import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;

@Data
@NoArgsConstructor
@ApiModel(value = "商品")
public class ProductDto {
    private Integer id;
    private String name;
    private String logo;
    private Discount discount;
    private BigDecimal price;
    private BigDecimal mallPrice;
    private BigDecimal discountPrice;
    private BigDecimal salesVolume;
}

@Data
class Discount {
    private Integer type;
    private BigDecimal value;
}

  然后进行请求,并对返回值进行解析,已在代码中进行注释,注意,请求方式第三方如果给了用例,最好参考用例进行请求,对返回值的解析可以使用以下方法

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dyh.peachsys.dto.ProductDto;
import io.swagger.annotations.Api;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Api(tags = "网络请求工具包")
public class HttpRequest {
    public static JSONArray httpRequest() {
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        HttpGet httpGet = new HttpGet(RequestCommon.url);
        CloseableHttpResponse response = null;
        try {
            response = httpClient.execute(httpGet);//执行请求
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {//请求成功执行
                HttpEntity entity = response.getEntity();//获取返回的数据
                String s = EntityUtils.toString(entity);//转换成字符串
                JSONObject datas = JSONObject.parseObject(s);//转换成JSON格式
                Integer status = (Integer) datas.get("status");//获取返回数据状态,get获取的字段需要根据提供的返回值去获取
                if (status == 200) {//返回的状态
                    JSONObject data = JSONObject.parseObject(datas.get("data").toString());//"data"是根据返回值设定
                    JSONObject jo = JSONObject.parseObject(data.toJSONString());
                    JSONArray records = JSONObject.parseArray(jo.get("records").toString());//"records"是根据返回值设定
                    return records;//返回的数据就是我需要去解析的
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void getData() {
        JSONArray datas = httpRequest();//调用方法,回去"data"里面的数据
        List<ProductDto> products = new ArrayList<>();//创建dto对象,这个对象的结构来自于返回值
        if (!datas.isEmpty()) {//如果返回的数据不为空
            products = JSONArray.parseArray(datas.toJSONString(), ProductDto.class);//转换成对象
        }
        //输出测试
        products.forEach(product -> System.out.println(product));
    }
}

给大家我的git源码,有兴趣的小伙伴可以看看具体的实现(一直在更新中)
git地址:https://github.com/peach-tec/peachsys

java后端调用第三方接口并携带文件参数的解决方案是使用MultipartFile来携带文件参数。您可以使用以下步骤来实现: 1. 导入所需的依赖项,包括spring-boot-starter-web和spring-boot-starter-websocket。 2. 在您的Controller中创建一个POST请求处理方法。在该方法中,将MultipartFile参数添加到方法的参数列表中,以接收文件。 3. 使用RestTemplate或者HttpClient等HTTP客户端库创建一个HTTP请求。 4. 将文件转换为字节数组,并将其添加到请求体中。确保您设置正确的Content-Type头部。 5. 如果需要,您还可以添加其他请求参数,例如token。 6. 发送请求并获取响应。 以下是一个简单的示例代码片段,演示了如何使用MultipartFile发送文件参数的POST请求: ```java @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file, @RequestParam("token") String token) { RestTemplate restTemplate = new RestTemplate(); String url = "https://api.example.com/upload"; // 将文件转换为字节数组,并设置Content-Type头部 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); byte[] fileBytes; try { fileBytes = file.getBytes(); } catch (IOException e) { // 处理文件读取错误 return "文件读取错误"; } // 创建请求HttpEntity<byte[]> requestEntity = new HttpEntity<>(fileBytes, headers); // 添加其他请求参数,例如token MultiValueMap<String, String> requestBody = new LinkedMultiValueMap<>(); requestBody.add("token", token); // 发送请求 ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class, requestBody); // 处理响应 if (response.getStatusCode() == HttpStatus.OK) { return "文件上传成功"; } else { return "文件上传失败"; } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

華小灼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值