摘要:今天開(kāi)發(fā)項(xiàng)目時(shí),遇到一個(gè)需求,需要上傳一個(gè)文件到微服務(wù)上,微服務(wù)是國(guó)外同事寫的,我負(fù)責(zé)處理和前端部分。問(wèn)題就出在調(diào)用另一個(gè)微服務(wù)上。支持的請(qǐng)求方法的方式,屬于的類。這個(gè)請(qǐng)求是通過(guò)協(xié)議傳輸?shù)摹?/p>
今天開(kāi)發(fā)項(xiàng)目時(shí),遇到一個(gè)需求,需要上傳一個(gè)excel文件到微服務(wù)上,微服務(wù)是國(guó)外同事寫的, 我負(fù)責(zé)處理gateway和前端部分。在postman上測(cè)試接口沒(méi)有問(wèn)題了,就準(zhǔn)備在代碼就實(shí)現(xiàn)。 但是遇到了一個(gè)問(wèn)題,無(wú)論怎樣都調(diào)用不成功。此時(shí)前端到gateway的調(diào)用是成功的,因?yàn)槲铱梢园裞ontroller 拿到的數(shù)據(jù)成功寫入到本地。問(wèn)題就出在gateway調(diào)用另一個(gè)微服務(wù)上。
@RequestMapping(value = "/import/excel", method = RequestMethod.POST) public Object importTableExcel(@RequestParam("file") MultipartFile file, @RequestParam("tableName") String tableName, @RequestParam("importType") String importType) { return ep2LookUpDBFeignClient.importTableExcel(file, tableName, importType); }
這個(gè)是controller代碼,前端用formData封裝提交,這里用MultipartFile 接收。到這一步是沒(méi)有問(wèn)題的
@RequestMapping(value = "/api/tables/import/excel", method = RequestMethod.POST, produces = { MediaType.APPLICATION_JSON_UTF8_VALUE }, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) Object importTableExcel(@RequestParam("file") MultipartFile file,@RequestParam("tableName")String tableName, @RequestParam("importType")String importType);
這個(gè)是調(diào)用微服務(wù)的代碼,問(wèn)題就出在這里。但是我一開(kāi)始也是百思不得其解,參數(shù)設(shè)置什么的都沒(méi) 有問(wèn)題了,那怎么還會(huì)出錯(cuò)了。于是我各種找資料,然后在一篇文中,看到原來(lái)是注解寫錯(cuò)了, MultipartFile 的注解應(yīng)該是@RequestPart,而不是@RequestParam。改了之后果然可以了。
@RequestMapping(value = "/api/tables/import/excel", method = RequestMethod.POST, produces = { MediaType.APPLICATION_JSON_UTF8_VALUE }, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) Object importTableExcel(@RequestPart("file") MultipartFile file,@RequestParam("tableName")String tableName, @RequestParam("importType")String importType);
這個(gè)是可以成功運(yùn)行的代碼,在此記錄一下,以免下次還犯同樣的錯(cuò)誤。 以下是 @RequestParam和@RequestPart的區(qū)別 1.@RequestPart這個(gè)注解用在multipart/form-data表單提交請(qǐng)求的方法上。 2.支持的請(qǐng)求方法的方式MultipartFile,屬于Spring的MultipartResolver類。這個(gè)請(qǐng)求是通過(guò) http協(xié)議傳輸?shù)摹? 3.@RequestParam也同樣支持multipart/form-data請(qǐng)求。 4.他們最大的不同是,當(dāng)請(qǐng)求方法的請(qǐng)求參數(shù)類型不再是String類型的時(shí)候。 5.@RequestParam適用于name-valueString類型的請(qǐng)求域,@RequestPart適用于復(fù)雜的請(qǐng)求域(像JSON,XML)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75284.html
摘要:提供給文件上傳微服務(wù)用的。注意注解能注冊(cè)到服務(wù)上,是因?yàn)樵撟⒔獍丝蛻舳说淖⒔?,該是一個(gè)復(fù)合注解。地址可以查看該微服務(wù)網(wǎng)關(guān)代理了多少微服務(wù)的。 SpringCloud(第 024 篇)簡(jiǎn)單文件上傳微服務(wù),并加入 zuul 微服務(wù)后用 zuul 微服務(wù)地址采取curl或者頁(yè)面點(diǎn)擊實(shí)現(xiàn)文件上傳 - 一、大致介紹 1、本章節(jié)主要將文件上傳微服務(wù)加入到 zuul 服務(wù)中去,然后利用 zuul...
摘要:二實(shí)現(xiàn)步驟添加引用包模塊客戶端發(fā)現(xiàn)模塊監(jiān)控和管理生產(chǎn)環(huán)境的模塊添加應(yīng)用配置文件,默認(rèn),默認(rèn)打印日志添加簡(jiǎn)單的上傳文件頁(yè)面添加上傳文件控制器上傳文件控制器。添加文件服務(wù)啟動(dòng)類簡(jiǎn)單文件上傳微服務(wù)采取或者頁(yè)面點(diǎn)擊實(shí)現(xiàn)文件上傳。 SpringCloud(第 023 篇)簡(jiǎn)單文件上傳微服務(wù)采取curl或者頁(yè)面點(diǎn)擊實(shí)現(xiàn)文件上傳 - 一、大致介紹 1、本章節(jié)主要搭建了一個(gè)簡(jiǎn)單的頁(yè)面上傳Web控制器,...
摘要:系統(tǒng)中的各個(gè)微服務(wù)可被獨(dú)立部署,各個(gè)微服務(wù)之間是松耦合的。每個(gè)微服務(wù)僅關(guān)注于完成一件任務(wù)并很好地完成該任務(wù)。傳統(tǒng)架構(gòu)升級(jí)困難。新的輕量級(jí)協(xié)議容器化的出現(xiàn)。熔斷處理在微服務(wù)出現(xiàn)問(wèn)題時(shí)防止出現(xiàn)雪崩效應(yīng)。 聊完Spring Boot,我們來(lái)看看Spring Boot最重要的一方面的應(yīng)用——Spring Cloud。 Spring Cloud 再聊SpringCloud之前我們先聊聊微服務(wù)。 ...
摘要:開(kāi)公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章系列處理登錄請(qǐng)求前后端分離一使用完美處理權(quán)限問(wèn)題前后端分離二使用完美處理權(quán)限問(wèn)題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開(kāi)公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章! Spring Boo...
閱讀 555·2021-08-31 09:45
閱讀 1666·2021-08-11 11:19
閱讀 898·2019-08-30 15:55
閱讀 836·2019-08-30 10:52
閱讀 2870·2019-08-29 13:11
閱讀 2940·2019-08-23 17:08
閱讀 2850·2019-08-23 15:11
閱讀 3079·2019-08-23 14:33