java里面封装https请求工具类

1.工具类如下

java 复制代码
@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.调用

java 复制代码
@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"));
            }

}


}
相关推荐
陈小桔几秒前
Springboot之常用注解
java·spring boot·后端
code小毛孩1 小时前
如何简单的并且又能大幅度降低任务队列的锁粒度、提高吞吐量?
java·jvm·数据库
你不是我我1 小时前
【Java开发日记】请介绍类加载过程,什么是双亲委派模型?
java·开发语言
牢七1 小时前
java10
java
阿挥的编程日记1 小时前
基于SpringBoot的高校(学生综合)服务平台的设计与实现
java·spring boot·后端·spring·mybatis
小霞在敲代码1 小时前
ArrayList - 数据结构 - 数组
java·索引
一个小白开发3 小时前
ip获取城市省份信息
java·tcp/ip
豆沙沙包?3 小时前
2025年--Lc170--H289. 生命游戏(矩阵)--Java版
java·游戏·矩阵
冬夜戏雪3 小时前
[学习日记][springboot 1-7][leetcode 6道]
java·开发语言·学习
讓丄帝愛伱3 小时前
idea 中 mapper.xml黄线警告怎么去掉
java·intellij-idea