「SpringBoot WEB系列」RestTemplate之文档提交

摘要:【SpringBoot WEB系列】RestTemplate之文档提交...

【SpringBoot WEB系列】RestTemplate之文档提交

尽管在具体的新项目中,依靠RestTemplate来完成文档提交的机遇很少(例如我早已开webclient的新坑了,才发现忘了这货...),可是这个专业知识点也還是必须掌握1下的,本文将简易详细介绍1下单独文档提交,好几个文档提交的应用姿态

I. 新项目构建

本新项目根据SpringBoot 2.2.1.RELEASE + maven 3.5.3 + idea开展开发设计

1. pom依靠

关键pom依靠以下

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>2. Rest服务

出示两个简易的提交文档的插口,下面得出两种不1样的写法,实际效果类似

/** * 文档提交 * * @param file * @return */@PostMapping(path = "upload")public String upload(@RequestPart(name = "data") MultipartFile file, String name) throws IOException { String ans = new String(file.getBytes(), "utf⑻") + "|" + name;return ans;}@PostMapping(path = "upload2")public String upload(MultipartHttpServletRequest request)throws IOException { List<MultipartFile> files = request.getFiles("data"); List<String> ans = new ArrayList<>();for (MultipartFile file : files) { ans.add(new String(file.getBytes(), "utf⑻")); }return JSON.toJSONString(ans);}3. 提交文档

在Resource資源文件目录下,新建两个用于检测提交的文字文档,內容各自以下

文档1 test.txt:

hello 1灰灰天气非常好哦文档2 test2.txt:

hello 2灰灰天气还能够哦简易设定1下系统日志文件格式,在application.yml文档中

logging: pattern: console:(%msg%n%n){blue}II. 新项目完成

文档提交,仍然是走的POST恳求,因此基础实际操作专业知识和前面的POST类似,唯1的差别在于传参

1. 文档提交

文档提交两个关键流程

设定恳求头传参为Resource最基本的单文档提交姿态案例以下,关键是依靠FileSystemResource来获得文档并提交

RestTemplate restTemplate = new RestTemplate();//设定恳求头HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.MULTIPART_FORM_DATA);//设定恳求体,留意是LinkedMultiValueMapFileSystemResource fileSystemResource =new FileSystemResource(this.getClass().getClassLoader().getResource("test.txt").getFile());MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();// post的文档form.add("data", fileSystemResource);// post的表单主要参数form.add("name", "嗒嗒哒");//用HttpEntity封裝全部恳求报文格式HttpEntity<MultiValueMap<String, Object>> files = new HttpEntity<>(form, headers);String ans = restTemplate.postForObject("http://127.0.0.1:8080/upload", files, String.class);log.info("upload fileResource return: {}", ans);当必须后端开发进行提交文档时,1般来说是更多的状况下是提交2进制(or流),不太会是文档提交,因此更普遍的是InputStreamResource的应用姿态

InputStream stream = this.getClass().getClassLoader().getResourceAsStream("test.txt");InputStreamResource inputStreamResource = new InputStreamResource(stream) {@OverridepubliclongcontentLength()throws IOException {// 这个方式必须重新写过,不然没法正确提交文档;缘故在于父类是根据载入流数据信息来测算尺寸return stream.available(); }@Overridepublic String getFilename(){return"test.txt"; }};form.clear();form.add("data", inputStreamResource);files = new HttpEntity<>(form, headers);ans = restTemplate.postForObject("http://127.0.0.1:8080/upload", files, String.class);log.info("upload streamResource return: {}", ans);关键留意

InputStreamResource 重新写过了contentLength(), getFilename()方式,去掉这个就无法一切正常的提交文档了自然除InputStreamResource以外,ByteArrayResource也是1个较为好的挑选

ByteArrayResource byteArrayResource = new ByteArrayResource("hello 1灰灰".getBytes()) {@Overridepublic String getFilename(){return"test.txt"; }};form.clear();form.add("data", byteArrayResource);files = new HttpEntity<>(form, headers);ans = restTemplate.postForObject("http://127.0.0.1:8080/upload", files, String.class);log.info("upload bytesResource return: {}", ans);关键留意

ByteArrayResource重新写过了getFilename()方式,感兴趣爱好的小伙子伴能够检测1下沒有它的状况2. 多文档提交

上面详细介绍的是单文档提交,自然大家也会出現1次提交好几个文档的状况,应用姿态和前面基础上1样,不过是传参的情况下多传两个罢了

// 好几个文档提交FileSystemResource f1 =new FileSystemResource(this.getClass().getClassLoader().getResource("test.txt").getFile());FileSystemResource f2 =new FileSystemResource(this.getClass().getClassLoader().getResource("test2.txt").getFile());form.clear();form.add("data", f1);form.add("data", f2);form.add("name", "多传");files = new HttpEntity<>(form, headers);ans = restTemplate.postForObject("http://127.0.0.1:8080/upload2", files, String.class);log.info("multi upload return: {}", ans);3. 輸出結果

II. 别的

0. 新项目&系列博文

博文

【SpringBoot WEB 系列】AsyncRestTemplate 之多线程非堵塞互联网恳求详细介绍篇【SpringBoot WEB 系列】RestTemplate 之非 200 情况码信息内容捕捉【SpringBoot WEB 系列】RestTemplate 之 Basic Auth 受权【SpringBoot WEB 系列】RestTemplate 之代理商浏览【SpringBoot WEB 系列】RestTemplate 之请求超时设定【SpringBoot WEB 系列】RestTemplate 当中文错码难题 fix【SpringBoot WEB 系列】RestTemplate 之自定恳求头【SpringBoot WEB 系列】RestTemplate 基本用法小结【SpringBoot WEB 系列】RestTemplate 4xx/5xx 出现异常信息内容捕捉【SpringBoot WEB 系列】RestTempalte urlencode主要参数分析出现异常全程剖析源代码

工程项目:https://github.com/liuyueyi/spring-boot-demo源代码: https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/221-web-resttemplate1. 1灰灰Blog

尽信书则比不上,以上內容,纯属1家之言,因本人工作能力比较有限,免不了有疏忽和不正确的地方,如发现bug或有更好的提议,欢迎指责纠正,不吝感谢

下面1灰灰的本人blog,纪录全部学习培训和工作中中的博文,欢迎大伙儿前往逛一逛

1灰灰Blog本人blog https://blog.hhui.top1灰灰Blog-Spring专题blog http://spring.hhui.top

1灰灰blog



联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:制作图片