java里面封装https请求工具类

1.工具类如下

@Component
@Slf4j
public class RestClientUtil<T> {

    private final RestTemplate restTemplate;

    public RestClientUtil() {
        this.restTemplate = new RestTemplate();
    }

    public JSONObject uploadFile(String url, String fileUrl) throws IOException {
        List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
        messageConverters.add(new MappingJackson2HttpMessageConverter());
        messageConverters.add(new FormHttpMessageConverter());
        messageConverters.add(new FastJsonHttpMessageConverter());
        restTemplate.setMessageConverters(messageConverters);

        // 构建请求体
        MultipartBodyBuilder bodyBuilder = new MultipartBodyBuilder();
        File file = new File(fileUrl);
        Path filePath = Paths.get(file.getAbsolutePath());
        byte[] fileBytes = Files.readAllBytes(filePath);
        bodyBuilder.part("data", new ByteArrayResource(fileBytes) {
            @Override
            public String getFilename() {
                return file.getName();
            }
        }, MediaType.MULTIPART_FORM_DATA);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);

        HttpEntity<MultiValueMap<String, HttpEntity<?>>> requestEntity = new HttpEntity<>(bodyBuilder.build(), headers);

        // 发送请求并处理响应
        ResponseEntity<JSONObject> exchange = restTemplate.exchange(url, HttpMethod.POST, requestEntity, JSONObject.class);
        if (exchange.getStatusCode() == HttpStatus.OK) {
            return exchange.getBody();
        }
        return null;
    }

    public ResponseEntity<T> get(String url, Class<T> responseType) {
        HttpHeaders headers = new HttpHeaders();

        HttpEntity<String> requestEntity = new HttpEntity<>(headers);

        return restTemplate.exchange(url, HttpMethod.GET, requestEntity, responseType);
    }


    public <T> T post(String url, MultiValueMap<String, String> requestBody, Class<T> responseType) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(requestBody, headers);
        ResponseEntity<T> responseEntity = restTemplate.postForEntity(
                url,
                requestEntity,
                responseType
        );
        return responseEntity.getBody();
    }

    public ResponseEntity<T> delete(String url, Class<T> responseType) {
        HttpHeaders headers = new HttpHeaders();

        HttpEntity<String> requestEntity = new HttpEntity<>(headers);

        return restTemplate.exchange(url, HttpMethod.DELETE, requestEntity, responseType);
    }

    public ResponseEntity<T> put(String url, Object body, Class<T> responseType) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        HttpEntity<Object> requestEntity = new HttpEntity<>(body, headers);

        return restTemplate.exchange(url, HttpMethod.PUT, requestEntity, responseType);
    }
}

2.调用

@org.springframework.stereotype.Service
@Service(version = "1.0.0")
@Slf4j
public class OcrServiceImpl implements OcrService {

@Resource
    private RedissonClient redissonClient;

    @Autowired
    private RestClientUtil<JSONObject> restClientUtil;


public BaseResponseVo<String> getLicenseInfo(OcrDTO ocrDTO) throws IOException {
JSONObject imgResult = restClientUtil.uploadFile(imgUrl + "?appkey=" + keyMapping.get(ocrDTO.getOcrType()), imagePath);

MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
            paramsMap.set("key", keyMapping.get(ocrDTO.getOcrType()));
            paramsMap.set("imageId", imgResult.getString("data"));
            JSONObject resultData = restClientUtil.post(url + typeMapping.get(ocrDTO.getOcrType()), paramsMap, JSONObject.class);
            if (!"10000".equals(resultData.getString("code"))) {
                return BaseResponseVo.error(imgResult.getString("code"), imgResult.getString("message"));
            }

}


}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值