springboot请求HTTP接口同时传文件和参数 1380次阅读 it • bug及解决方案 • 文章 2021-12-09 # 废话不多说,上代码! ## 1、服务提供方 ### Controller层 ```java @RestController @CrossOrigin @RequestMapping("/core/test") public class TestController { @Autowired private TestService testService; @ApiOperation(value = "测试同时传文件和参数", notes = "无") @PostMapping("/testFileAndParam") public ReturnVO testFileAndParam(@RequestParam("file") MultipartFile multipartFile, @RequestParam("param") String param) { return testService.testFileAndParam(multipartFile, param); } } ``` ### Service层 ```java /** * 测试同时传文件和参数 * @param multipartFile * @param param * @return */ public ReturnVO testFileAndParam(MultipartFile multipartFile, String param) { if (multipartFile == null) { return new ReturnVO(ReturnEnum.ERROR_FILE_NULL); } if (StringUtils.isBlank(param)) { return new ReturnVO(ReturnEnum.ERROR_POST_PARAM); } // 入参转换为file File targetFile = null; try { targetFile = FileUtil.multipartFileToFile(multipartFile); // …… 具体处理业务 } catch (Exception e) { e.printStackTrace(); } finally { FileUtil.delteTempFile(targetFile); } // 模拟处理完业务后的返回结果 JSONObject returnJson = new JSONObject(); returnJson.put("fileName", targetFile.getName()); returnJson.put("hello", "如果你看到这个,说明你已经调用成功啦!"); returnJson.put("time", System.currentTimeMillis()); return new ReturnVO<>(ReturnEnum.SUCCESS, returnJson); } ``` ## 2、接口调用方 ### 引入伟大的Hutool包 ``` cn.hutool hutool-all 5.7.16 ``` ### 请求示例代码 ```java @Slf4j public class HttpTest { public static void main(String... args) { // 服务请求地址 String httpUrl = "http://192.168.60.226:8081/core/test/testFileAndParam"; // 上传文件 File file = FileUtil.file("D:/可以色色.jpg"); // 请求参数 String param = null; UserEntity user = new UserEntity(); user.setUsername("username"); user.setPassword("123456"); param = JSONObject.toJSONString(user); // 可以塞个加密的字符串过去,服务的再解密 String result = postByHutool(httpUrl, file, param); if (StrUtil.isBlank(result)) { log.error("返回结果为空!"); } // 解析返回参数。。。 JSONObject jsonObject = JSONObject.parseObject(result); // …… 后续其他业务 } /** * 使用Hutool包发起请求 * @return * @param httpUrl * @param file * @param param */ private static String postByHutool(String httpUrl, File file, String param) { Map map = new HashMap<>(); map.put("file", file); map.put("param", param); log.info("请求中..."); String result = HttpUtil.post(httpUrl, map); log.info("请求结果:{}", result); return result; } } ``` ## 3、运行测试 ### 启动服务器,运行步骤2的示例代码,结果为: ```java 17:32:58.839 [main] INFO HttpTest - 请求中... 17:32:58.977 [main] INFO HttpTest - 请求结果:{"code":"200","msg":"操作成功","data":{"fileName":"可以色色.jpg","hello":"如果你看到这个,说明你已经调用成功啦!","time":1639042378970}} ``` ## 4、写在最后 在查阅了互联网大量旧资料后,还是觉得Hutool包最强大、最优雅!四五行代码轻描淡写的把请求给发过去了。原生方式请求的话,bug一堆,代码还非常长。 **如果你需要原生代码请求,请参考这篇文章, https://blog.csdn.net/u010957645/article/details/83274795 亲测可行。** ** 文中MultpartFile转File参考这篇文章的方法,会在服务器本地创建一个临时文件,所以我在finally里删除它了。 https://blog.csdn.net/u012279452/article/details/92840583 ** Alipay手机上阅读 最后一次更新于2021-12-09 None
看不懂,但是感觉好牛,留下足迹,欢迎回访!
By 兴哥's Blog at 2022-1-15 12:48:41