【Java】Java发送httpPost,httpGet,httpPut,httpDelete请求

这篇具有很好参考价值的文章主要介绍了【Java】Java发送httpPost,httpGet,httpPut,httpDelete请求。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        业务场景:最近开发的项目使用的将文件图片和视频存储在Minio当中,但是准备上线申请资源的时候申请不到资源,就临时决定使用厂商提供的Api接口进行文件图片和视频上传,然后就需要在后端进行登录,文件校验和文件存储和文件检索等http请求的书写,所以下面就分享给大家,如果有不足的地方还请多指教。

Maven依赖:

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.13</version> <!-- 根据需要选择版本 -->
        </dependency>

        <!-- Apache HttpClient 依赖 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.13</version> <!-- 根据需要选择版本 -->
        </dependency>

Controller:

        httpPost请求:


@RestController
@Slf4j
@RequestMapping("/backend/v1/upload")
public class UploadDIMSController {

    @Autowired
    private UploadService uploadService;

    @Autowired
    private ResourceService resourceService;

    @Autowired
    private DIMSConfig dimsConfig;


    /**
     * DIMS文件上传的接口
     * 统一使用一个接口
     */
    @BackendPermissionMiddleware(slug = BPermissionConstant.RESOURCE_CATEGORY)
    @PostMapping("/dims-upload")
    public JsonResponse uploadDIMSHttp(@RequestParam HashMap<String, Object> params, MultipartFile file)
            throws ServiceException {
        if (file != null && !file.isEmpty()) {
            try {
                //1.登录获取token
                String token = loginDIMS(dimsConfig.getDimsSysCode(), dimsConfig.getUsername(), dimsConfig.getPassword());
                if (token.equals("获取token失败") ) {
                    return JsonResponse.error("服务器异常,请稍后重试;" + token);
                }
                //2.获取批次号 和scanTime
                HashMap<String, String> scanTimeAndBatchCode = getBatchCode(dimsConfig.getDimsSysCode(), dimsConfig.getDimsFunCode(), token);

                if (scanTimeAndBatchCode == null || scanTimeAndBatchCode.isEmpty()) {
                    log.info("dims服务器异常,获取批次号失败。");
                    return JsonResponse.error("服务器异常,请稍后重试");
                }

                //3.上传文件 获取imageID上传的唯一标识
                String imageId = uploadFileAcquireImageId(file);

                if (imageId.equals("文件上传失败")) {
                    log.info("dims服务器异常,文件上传失败。");
                    return JsonResponse.error("服务器异常,请稍后重试;" + imageId);
                }

                //4.上传业务信息
                List<InfosVO> arrayList = new ArrayList<>();
                InfosVO infosVO = new InfosVO();  
                arrayList.add(infosVO);

                String code = uploadFileInfo(dimsConfig.getDimsSysCode(), token, dimsConfig.getDimsFunCode(), arrayList);
                if (code != "1") {
                    log.info("dims服务器异常,上传业务信息失败。");
                    return JsonResponse.error("服务器异常,请稍后重试;");
                }
                //5.文件检索,将检索的地址直接保存到数据库当中直接返回给前端,前端进行处理
                String downloadUrl = fileSearchAndSavaUrlToResource(dimsConfig.getDimsSysCode(), scanTimeAndBatchCode.get("batchCode"), token, dimsConfig.getDimsFunCode());
                if (downloadUrl.equals("文件检索失败。") ) {
                    log.info("dims服务器异常,文件检索失败。");
                    return JsonResponse.error("服务器异常,请稍后重试;" + downloadUrl);
                }
                

                //获取上传到那个分类当中
                String categoryIds = MapUtils.getString(params, "category_ids");
                //传递管理员id,文件,和分类
                Resource resource = uploadService.storeDIMS(BCtx.getId(), file, categoryIds, downloadUrl );

                if (resource != null) {
                    //上传成功应该传递文件的路径
                    return JsonResponse.data("上传成功。");
                } else {
                    return JsonResponse.error("上传失败。");
                }

            } catch (IOException e) {
                e.printStackTrace();
                throw new ServiceException("Error uploading file to DIMS server");
            }
        } else {
            return JsonResponse.error("文件为空。");
        }

    }


    /**
     * 1.登录获取token的方法
     */
    public String loginDIMS(String sysCode, String userName, String password) throws IOException {
        // 构建HTTP客户端
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 创建 HTTP POST 请求
        HttpPost httpPost = new HttpPost(dimsConfig.getLoginUrl());

        // 创建要传递的参数列表
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("sysCode", sysCode));
        params.add(new BasicNameValuePair("user", userName));
        params.add(new BasicNameValuePair("pwd", password));

        // 将参数设置到请求中
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        try {
            // 执行请求并获取响应
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();


            // 处理响应
            if (entity != null) {
                // 将响应实体转换为字符串,响应的token
                String responseText = EntityUtils.toString(entity);
                return responseText;
            } else {
                return "获取token失败";
            }
        } finally {
            // 释放资源
            httpPost.releaseConnection();
        }
    }

    /**
     * 2.获取批次号
     */
    public HashMap<String, String> getBatchCode(String sysCode, String funCode, String token) throws IOException {
        HashMap<String, String> hashMap = new HashMap<>();
        ObjectMapper objectMapper = new ObjectMapper();
        // 构建HTTP客户端
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 创建 HTTP POST 请求
        HttpPost httpPost = new HttpPost(dimsConfig.getBatchCodeUrl());

        // 创建要传递的参数列表
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("sysCode", sysCode));
        params.add(new BasicNameValuePair("funCode", funCode));
        params.add(new BasicNameValuePair("token", token));

        // 将参数设置到请求中
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        try {
            // 执行请求并获取响应
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();

            // 处理响应
            if (entity != null) {
                String responseText = EntityUtils.toString(entity);
                log.info("getBatchCode-entity:{}", responseText);
                //{"msg":"获取成功","data":"{\"scanTime\":\"2023-09-27 7:40:32\"}}"
                // 去除jar包返回的空字符,对接的系统的bug
                String sanitizedText = responseText.replace("\0", "");
                //  String sanitizedText = responseText.trim(); //第二种方式去除空白字符
                //{"msg":"获取成功","data":{"scanTime":"2023-09-27 7:40:32","batchCode":"sdsdas211dsdx"}}
                // 解析响应字符串
                JSONObject entries = new JSONObject(sanitizedText);
                hashMap.put("scanTime", entries.getJSONObject("data").getStr("scanTime"));
                hashMap.put("batchCode", entries.getJSONObject("data").getStr("batchCode"));
                return hashMap;
            } else {
                return new HashMap<>();
            }
        } finally {
            // 释放资源
            httpPost.releaseConnection();
        }
    }

    /**
     * 3.上传文件返回imageId
     */
    public String uploadFileAcquireImageId(MultipartFile file) throws IOException {
        // 构建HTTP客户端
        CloseableHttpClient httpClient = HttpClients.createDefault();

        // 创建HTTP POST请求
        HttpPost httpPost = new HttpPost(dimsConfig.getUploadMaxFileUrl());

        // 创建一个包含文件和其他参数的多部分实体
        /**
         * 这是需要对接的这个接口也是用MultipartFile file进行接收的方式
         * */
    /*    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        builder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, file.getOriginalFilename());

        httpPost.setEntity(builder.build());*/
        /**
         * 接口接收二进制数据
         * */
        // 设置请求头,告诉服务器请求体是二进制数据
        httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/octet-stream");

        // 将文件内容作为二进制数据设置为请求体
        byte[] fileBytes = file.getBytes();
        HttpEntity entity = new ByteArrayEntity(fileBytes);
        httpPost.setEntity(entity);
        try {
            // 发送HTTP请求
            HttpResponse response = httpClient.execute(httpPost);
            // 处理响应
            int statusCode = response.getStatusLine().getStatusCode();
            String responseBody = EntityUtils.toString(response.getEntity());
            if (statusCode == 200) {
                // 请求成功,根据响应处理结果
                //这里可能还是要对responseBody进行空值截取
                JSONObject entries = new JSONObject(responseBody);
                return entries.getJSONObject("data").getStr("imageId");
            } else {
                // 请求失败,根据需要处理错误情况
//                return new JsonResponse("Upload failed", responseBody);
                return "文件上传失败";
            }
        } finally {
            // 释放资源
            httpPost.releaseConnection();
        }
    }

    /**
     * 4.上传业务信息
     */
    //            uploadFileInfo(dimsConfig.getDimsSysCode(),token,dimsConfig.getDimsFunCode(),arrayList);
    public String uploadFileInfo(String sysCode, String token, String funCode, List<InfosVO> arrayList) throws IOException {
        // 创建 ObjectMapper 对象,用于将对象转换为 JSON 字符串
        ObjectMapper objectMapper = new ObjectMapper();

        // 将 arrayList 转换为 JSON 字符串
        String arrayListJson = objectMapper.writeValueAsString(arrayList);
        // 构建HTTP客户端
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 创建 HTTP POST 请求
        HttpPost httpPost = new HttpPost(dimsConfig.getUploadServiceInfoUrl());

        // 创建要传递的参数列表
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("sysCode", sysCode));
        params.add(new BasicNameValuePair("token", token));
        params.add(new BasicNameValuePair("funCode", funCode));
        params.add(new BasicNameValuePair("infos", arrayListJson));//转换成JSON字符串

        // 将参数设置到请求中
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        try {
            // 执行请求并获取响应
            HttpResponse response = httpClient.execute(httpPost);
            // 处理响应
            String responseBody = EntityUtils.toString(response.getEntity());

            // 请求成功,根据响应处理结果
            //这里可能还是要对responseBody进行空值截取
            JSONObject entries = new JSONObject(responseBody);
            return entries.getStr("code");
        } finally {
            // 释放资源
            httpPost.releaseConnection();
        }
    }

    /**
     * 5.文件检索,获取 downloadUrl 进行拼接进行下载
     */
    //            fileSearchAndSavaUrlToResource(dimsConfig.getDimsSysCode(),scanTimeAndBatchCode.get("batchCode"),token,dimsConfig.getDimsFunCode());
    public String fileSearchAndSavaUrlToResource(String sysCode, String batchCode, String token, String funCOde) throws IOException {

        // 构建HTTP客户端
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 创建 HTTP POST 请求
        HttpPost httpPost = new HttpPost(dimsConfig.getFileSearchUrl());

        // 创建要传递的参数列表
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("sysCode", sysCode));
        params.add(new BasicNameValuePair("batchCode", batchCode));
        params.add(new BasicNameValuePair("token", token));
        params.add(new BasicNameValuePair("funCode", funCOde));

        // 将参数设置到请求中
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        try {
            // 执行请求并获取响应
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            log.info("fileSearchAndSavaUrlToResource-entity:{}", entity);

            // 处理响应
            if (entity != null) {
                // 将响应实体转换为字符串
                String responseText = EntityUtils.toString(entity);
                JSONObject entries = new JSONObject(responseText);
                if (entries.getStr("code") == "1") {
                    JSONArray dataArray = entries.getJSONArray("data");
                    JSONObject firstElement = dataArray.getJSONObject(0);
                    // 这里的 firstElement 就是第一个元素
                    return firstElement.getStr("downloadUrl");//获取 downloadUrl
                } else {
                    return "文件检索失败。";
                }

            } else {
                return "文件检索失败。";
            }
        } finally {
            // 释放资源
            httpPost.releaseConnection();
        }

    }

    /**
     * 获取上传文件的md5
     *
     * @param file
     * @return
     * @throws IOException
     */
    public String getMd5(MultipartFile file) {
         try {
            //获取文件的byte信息
            byte[] uploadBytes = file.getBytes();
            // 拿到一个MD5转换器
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            byte[] digest = md5.digest(uploadBytes);
            //转换为16进制
            String md5Hex = new BigInteger(1, digest).toString(16);
            // 确保MD5值始终是32位
            while (md5Hex.length() < 32) {
                md5Hex = "0" + md5Hex;
            }
            return md5Hex;
        } catch (Exception e) {
            log.error(e.getMessage());
        }
        return null;
    }

}

          httpGet请求:     

public String loginDIMS(String sysCode, String userName, String password) throws IOException {
    // 创建HTTP客户端
    HttpClient httpClient = HttpClients.createDefault();

    // 构建GET请求URL
    String getUrl = dimsConfig.getLoginUrl() + "?sysCode=" + sysCode + "&user=" + userName + "&pwd=" + password;

    // 创建HTTP GET请求
    HttpGet httpGet = new HttpGet(getUrl);

    try {
        // 执行GET请求并获取响应
        HttpResponse response = httpClient.execute(httpGet);
        HttpEntity entity = response.getEntity();

        // 处理响应
        if (entity != null) {
            // 将响应实体转换为字符串,响应的token
            String responseText = EntityUtils.toString(entity);
            return responseText;
        } else {
            return "获取token失败";
        }
    } finally {
        // 释放资源
        httpGet.releaseConnection();
    }
}

        httpPut请求:

public JsonResponse httpPutMethod(@RequestParam HashMap<String, Object> params, MultipartFile file) throws IOException {
        // 创建HTTP客户端
        CloseableHttpClient httpClient = HttpClients.createDefault();

        // 构建PUT请求URL

        String putUrl = "http://127.0.0.1:8080/test"; // 替换为实际的上传URL


        // 创建HTTP PUT请求
        HttpPut httpPut = new HttpPut(putUrl);

        try {
            // 创建请求体,使用MultipartEntityBuilder来构建
            MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
            entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            //将file和parms参数放在请求体中
            entityBuilder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, file.getOriginalFilename());

            entityBuilder.addTextBody("params", new Gson().toJson(params), ContentType.APPLICATION_JSON);

            // 设置请求实体
            HttpEntity reqEntity = entityBuilder.build();
            httpPut.setEntity(reqEntity);

            // 执行PUT请求并获取响应
            HttpResponse response = httpClient.execute(httpPut);
            HttpEntity responseEntity = response.getEntity();
            log.info("response:{}", response);
            log.info("responseEntity:{}", responseEntity);
            // 处理响应
            if (responseEntity != null) {
                // 将响应实体转换为字符串
                String responseText = EntityUtils.toString(responseEntity);
                log.info("responseText:{}", responseText);
                if (responseText != null) {
                    return JsonResponse.data(responseText);
                }

                return JsonResponse.error("处理失败");
            } else {
                return JsonResponse.error("上传和处理失败");
            }
        } finally {
            // 释放资源
            httpPut.releaseConnection();
        }
    }

        httpDelete请求:

public String deleteDIMS(String resourceUrl) throws IOException {
    // 创建HTTP客户端
    HttpClient httpClient = HttpClients.createDefault();

    // 构建DELETE请求
    HttpDelete httpDelete = new HttpDelete(resourceUrl);

    try {
        // 执行DELETE请求并获取响应
        HttpResponse response = httpClient.execute(httpDelete);
        int statusCode = response.getStatusLine().getStatusCode();

        // 处理响应
        if (statusCode == 200) {
            // 处理成功的响应,根据需要返回结果
            return "删除成功";
        } else {
            // 处理失败的响应,根据需要返回错误信息
            return "删除失败,状态码:" + statusCode;
        }
    } finally {
        // 释放资源
        httpDelete.releaseConnection();
    }
}

还有一个小知识:就是在对接厂商提供的接口的时候获取返回的JSON数据发现数据格式为

{"msg":"获取成功","data":"{\"scanTime\":\"2023-09-27 7:40:32\"}}"

其实就是JSON格式,但是就是识别不出来,最后发现这段数据中{”msg“前面有一个空字符,特别神奇,也不知道他们响应是如何响应的,然后我通过

String sanitizedText = responseText.replace("\0", "");

这个方法把这个小问题给解决了,也可以使用

String sanitizedText = responseText.trim(); //第二种方式去除空白字符

进行解决。文章来源地址https://www.toymoban.com/news/detail-729901.html

到了这里,关于【Java】Java发送httpPost,httpGet,httpPut,httpDelete请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在java中发送post请求

    使用第三方库,如Apache HttpClient:Apache HttpClient是一个功能强大的HTTP客户端库,提供了更便捷的方式发送HTTP请求。 为了更好的构建请求体这里我写了一个用于将MapString, String转换为字符串的方法。 它遍历Map中的每个键值对,将键和值以key=value的形式拼接,并用分隔每个键值对

    2024年04月28日
    浏览(32)
  • 【Java】汇总Java中发送HTTP请求的7种方式

    今天在项目中发现一个功能模块是额外调用的外部服务,其采用CloseableHttpClient调用外部url中的接口…… CloseableHttpClient HTTP发送请求处理流程:

    2024年02月11日
    浏览(40)
  • java使用RestTemplate发送Get请求

    使用RestTemplate的 getForObject() 或 getForEntity() , getForObject() 只有响应体, getForEntity() 包含HTTP响应的全部信息,以常用的 getForObject() 为例: 传入两个参数:1. url 2. 响应数据类型 这里演示了以字符串形式接收get响应的例子: 需要注意的是,当get请求的接口响应的 Content-Type 是

    2024年02月15日
    浏览(50)
  • Java 发送Http请求携带中文参数时 请求报400的错误请求

    在 Java 中,URL 中不能直接包含中文字符,因为 URL 规范要求 URL 必须是 ASCII 字符。如果需要在 URL 中传递中文参数,需要对中文参数进行 URL 编码,将其转换为浏览器中的参数形式。可以使用 java.net.URLEncoder 类来进行 URL 编码。

    2024年02月11日
    浏览(39)
  • Java发送form-data请求

    在Java中发送form-data请求,可以使用Apache HttpClient或OkHttp这样的HTTP客户端库来发送请求。 1.添加依赖 2.代码 对于HttpClient对象,HttpClientBuilder.create().build()创建的实例是 不需要手动关闭 的。 在使用HttpClientBuilder创建HttpClient对象时,不需要手动关闭HttpClient对象。这是因为HttpCli

    2024年02月10日
    浏览(44)
  • Java发送HTTP GET/POST请求

    在这篇文章中,将向你展示四种发送Http的GET/POST的例子,如下: 在Java11的java.net.http.*包中,有一个HttpClient类可以完成HTTP请求。 Java11HttpClientExample.java 本例使用HttpURLConnection(http)和HttpsURLConnection(https) HttpURLConnectionExample.java 使用Apache HttpClient完成HTTP请求的发送需要添加Maven依赖

    2024年02月13日
    浏览(45)
  • java后端对接外部系统(HttpClient HttpPost)

    最近遇到一个需求对接外部系统,我们自己的系统发送请求,根据请求内容的不同调用不同的外部系统。举例:我们是做互联网医院的,根据医生开处方选择药店的不同,调用各药店自己的系统,返回结果 可以学到对接外部系统的一些设计 构造需要的json java项目中HTTPPost请求

    2024年02月15日
    浏览(50)
  • java 发送 http 请求练习两年半(HttpURLConnection)

    1、起一个 springboot 程序做 http 测试: 2、写一个 HttpURLConnection 自定义客户端 3、测试 get 和 post 请求 4、控制台输出结果 中间遇到一些坑,经常以为 http 会有方法像 openfeign 那样传入请求参数,忽略了路径拼接, 启动的 springboot 接收的 post 的请求体为 List 类型,且 Content-Type

    2023年04月22日
    浏览(43)
  • Java对接百度文心一言,Java发送POST请求,类似前端AJAX

    这是项目中使用的对接百度文心一言后端代码

    2024年02月15日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包