網(wǎng)站做跳轉(zhuǎn)對排名有影響嗎/網(wǎng)絡(luò)營銷的基本內(nèi)容有哪些
feign技巧 - form方式傳值。
0. 文章目錄
- 1. 前言
- 2. 調(diào)用樣例
- 3. 原理解析
- 3.1 feign端序列化參數(shù)
- 3.2 SpringMVC服務(wù)端解析參數(shù)
- 3.3 補充 - 繼承關(guān)系不會被傳遞的原因
- 3.4 補充 - 不能使用GET。
- 4. 總結(jié)
1. 前言
直接正題。 如何使用feign進行fom表單方式的請求調(diào)用,以及其中的注意事項。
2. 調(diào)用樣例
// =============================================== feign調(diào)用端// 注意事項:// 1. 兩個參數(shù)都要使用@RequestPart注解進行標(biāo)注.// 2. consumes屬性配置為必選.// 3. 代表參數(shù)載體對象的params字段, 不能存在繼承關(guān)系, 所有字段都必須直接定義在KDeployParams中. 如果存在基類, 那么處理流程中,只有在`KDeployParams`中直接定義的字段才能被正確解析并傳遞給服務(wù)端,基類的字段不會被feign解析傳遞. @PostMapping(value = "/projectB/postWithFormData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)String postWithFormData(@RequestPart("file") MultipartFile file, @RequestPart KDeployParams params);// =============================================== 對應(yīng)的服務(wù)端 // 注意事項:// 1. 第二個參數(shù)params前面沒有任何注解, 或者使用@ModelAttribute。千萬不要使用@RequestPart.@PostMapping("/projectB/postWithFormData")public String postWithFormData(@RequestPart(required = false, name = "file") MultipartFile file,KDeployParams params) throws InterruptedException, IOException { ... }
3. 原理解析
分為兩部分 —— 發(fā)送端的feign,以及服務(wù)端的SpringMVC。
3.1 feign端序列化參數(shù)
整條請求鏈路中,feign端的調(diào)用層級最終會來到位于feign-form-xx.jar中的MultipartFormContentProcessor.process (...)
。
3.2 SpringMVC服務(wù)端解析參數(shù)
針對上文例子中,在服務(wù)端接收層面,SpringMVC中負責(zé)傳遞過來的參數(shù)還原/反序列化為KDeployParams
的是ServletModelAttributeMethodProcessor
(該類實現(xiàn)了大名鼎鼎的HandlerMethodArgumentResolver
)。
3.3 補充 - 繼承關(guān)系不會被傳遞的原因
PojoUtil的坑,下面這里只會檢索出當(dāng)前類直接聲明的字段。
3.4 補充 - 不能使用GET。
否則報如下錯誤:
4. 總結(jié)
神在細節(jié)之中。
細節(jié)是魔鬼。