欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用FeignClient調(diào)用POST表單Body內(nèi)沒有參數(shù)問題

 更新時(shí)間:2022年03月22日 08:38:12   作者:五歲程序員  
這篇文章主要介紹了使用FeignClient調(diào)用POST表單Body內(nèi)沒有參數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

FeignClient調(diào)用POST表單Body沒有參數(shù)

1、問題:在使用FeignClient調(diào)用第三方接口,對(duì)方是普通POST接口,但是調(diào)用返回400,后發(fā)現(xiàn)請(qǐng)求體沒有攜帶需要的參數(shù)。

2、查找資料發(fā)現(xiàn),F(xiàn)eignClient默認(rèn)POST請(qǐng)求發(fā)送參數(shù)為JSON格式,如需要使用表單形式,必須自定義設(shè)置。

3、附代碼

import com.lenovo.mt.config.FormFeignConfiguration;
import com.lenovo.mt.remote.eservice.vo.EServiceToken;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
?* @Description
?* @Author zhaoke
?* @Date 2019/12/16 10:42
?**/
@FeignClient(name = "***", url = "${***}",configuration = FormFeignConfiguration.class, fallback = TokenFail.class)
public interface ITokenRemote {
? ? @PostMapping(value = "***",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
? ? EServiceToken getToken(@RequestParam("client_id")String clientId,@RequestParam("client_secret")String clientSecret,@RequestParam("grant_type")String grantType);
}

其中主要設(shè)置在FormFeignConfiguration這個(gè)類中

import feign.codec.Encoder;
import feign.form.FormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Scope;
import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE;
/**
?* @Description
?* @Author zhaoke
?* @Date 2019/12/17 13:05
?**/
@Configuration
public class FormFeignConfiguration {
? ? @Autowired
? ? private ObjectFactory<HttpMessageConverters> messageConverters;
? ? @Bean
? ? @Primary
? ? @Scope(SCOPE_PROTOTYPE)
? ? Encoder feignFormEncoder() {
? ? ? ? return new FormEncoder(new SpringEncoder(this.messageConverters));
? ? }
}

FeignClient參數(shù)問題

使用Get方式調(diào)用服務(wù)提供者

服務(wù)消費(fèi)者,需要在所有參數(shù)前加上@RequestParam注解

服務(wù)消費(fèi)者,指明是Get方式,如果不指明那么在滿足條件1 的情況下默認(rèn)使用get方式

1和2都滿足才使用Get方式

使用Post方式調(diào)用服務(wù)提供者

在所有參數(shù)前面加上@RequestParam注解,并且指明使用的Post方式

在參數(shù)前面加上@RequestBody注解(有且只有一個(gè)@ RequestBody)或者什么也沒有(有多個(gè)參數(shù)其余參數(shù)前面都要加上@RequestParam)

1和2滿足一個(gè)就使用Post方式

三種情況(無參、單參、多參)

無參Get

如果發(fā)送無參的Get請(qǐng)求,可以不指定method,默認(rèn)就是Get請(qǐng)求

無參Post

指定method是Post方式,否則就是Get請(qǐng)求

單參Get

指定該參數(shù)是@RequestParam修飾,這時(shí)候method默認(rèn)是Get,也可以自己指定Get方式

單參Post

該參數(shù)前面加@RequestParam修飾,并且使用Post方式

或者

使用@RequestBody修飾該參數(shù),或者沒使用@RequestParam和@RequestBody修飾該參數(shù),再這個(gè)使用不論指定Post還是Get都會(huì)使用Post進(jìn)行請(qǐng)求

注意:

在使用fegin消費(fèi)服務(wù)的時(shí)候,如果參數(shù)前面什么也沒寫,默認(rèn)是@RequestBody來修飾的

@RequestBody修飾的參數(shù)需要以Post方式來傳遞

在服務(wù)提供者的Controller中:

1.如果要接收@RequestBody指明的參數(shù),那么對(duì)應(yīng)方法的對(duì)應(yīng)參數(shù)前一定要有@RequestBody;(如果沒有的話,收到的參數(shù)值就為null;如果寫成@RequestParam的話,那么feign調(diào)用會(huì)失敗)

2.如果接收@ RequestParam指明的參數(shù),那么可以寫@ RequestParam也可以不寫,如果參數(shù)名稱一致不用,不一致需要寫

多參Get

需要在所有參數(shù)前面添加@ RequestParam注解,這時(shí)候可以加Get也可以不加Get

多參Post

服務(wù)消費(fèi)者中,最多只能有一個(gè)參數(shù)是@RequestBody指明的,其余的參數(shù)必須使用@RequestParam指明

也可以在第一個(gè)參數(shù)前面什么也不寫(默認(rèn)使用@RequestBody修飾)其余的參數(shù)都需要加@RequestParam

如果所有參數(shù)都是以@RequestParam修飾,并且使用的是Post方式,那么也是以Post方式來請(qǐng)求

在服務(wù)提供者的Controller中:

1.如果服務(wù)消費(fèi)者傳過來參數(shù)時(shí),全都用的是@RequestParam的話,那么服務(wù)提供者的Controller中對(duì)應(yīng)參數(shù)前可以寫@RequestParam,也可以不寫(當(dāng)兩邊參數(shù)名字一致時(shí),可以省略不寫)

2. 如果服務(wù)消費(fèi)者傳過來參數(shù)時(shí),有@RequestBody的話,那么服務(wù)提供者的Controller中對(duì)應(yīng)參數(shù)前必須要寫@RequestBody(如果是多參數(shù)的話,其余參數(shù)前視情況可以寫@RequestParam,也可以不寫)

@RequestBody和@RequestParam的區(qū)別

@RequestParam用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內(nèi)容,在Http中如果不指定Content-Type則默認(rèn)使用application/x-www-form-urlencoded類型

@ RequestBody,處理HttpEntity傳遞過來的數(shù)據(jù),用來處理非Content-Type: application/x-www-form-urlencoded編碼格式的數(shù)據(jù)

Get請(qǐng)求沒有HttpEntity所以不用@ RequestBody

POST請(qǐng)求中,通過HttpEntity傳遞的參數(shù),必須要在請(qǐng)求頭中聲明數(shù)據(jù)的類型Content-Type,SpringMVC通過使用HandlerAdapter 配置的HttpMessageConverters來解析HttpEntity中的數(shù)據(jù),然后綁定到相應(yīng)的bean上

總結(jié):Get不能使用表單,只能在url中傳參,傳參方式只有這一種。 Post可以使用表單,也可以在url中傳參。使用表單時(shí)有幾種數(shù)據(jù)類型(表現(xiàn)為數(shù)據(jù)的存儲(chǔ)位置不同):

1、x-www-form-urlencoded 參數(shù)存儲(chǔ)在query中 用@RequestParam接收。

2、formdata 參數(shù)存儲(chǔ)在body中,用@RequestBody接收,文件類型用@RequestPart接收。

3、raw(josn,xml) 參數(shù)存儲(chǔ)在body中 用@RequetBody接收。

總結(jié)一下: 凡是放在body中的都可以用@RequestBody接收,文件類型的數(shù)據(jù)可以用@RequestPart接收。 凡是放在query中的都可以用@RequestParam接收,包括Get方式提交和Post(x-www-form-urlencoded)方式提交的

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳談Lock與synchronized 的區(qū)別

    詳談Lock與synchronized 的區(qū)別

    下面小編就為大家?guī)硪黄斦凩ock與synchronized 的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Sharding JDBC讀寫分離實(shí)現(xiàn)原理及實(shí)例

    Sharding JDBC讀寫分離實(shí)現(xiàn)原理及實(shí)例

    這篇文章主要介紹了Sharding JDBC讀寫分離實(shí)現(xiàn)原理及實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java中String類getBytes()方法詳解與完整實(shí)例

    Java中String類getBytes()方法詳解與完整實(shí)例

    這篇文章主要給大家介紹了關(guān)于Java中String類getBytes()方法詳解與完整實(shí)例的相關(guān)資料,getBytes()是Java編程語言中將一個(gè)字符串轉(zhuǎn)化為一個(gè)字節(jié)數(shù)組byte[]的方法,需要的朋友可以參考下
    2023-10-10
  • Java長度不足左位補(bǔ)0的3種實(shí)現(xiàn)方法

    Java長度不足左位補(bǔ)0的3種實(shí)現(xiàn)方法

    這篇文章主要介紹了Java長度不足左位補(bǔ)0的3種實(shí)現(xiàn)方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Spring如何利用@Value注解讀取yml中的map配置

    Spring如何利用@Value注解讀取yml中的map配置

    這篇文章主要介紹了Spring如何利用@Value注解讀取yml中的map配置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • vue數(shù)據(jù)響應(yīng)式原理重寫函數(shù)實(shí)現(xiàn)數(shù)組響應(yīng)式監(jiān)聽

    vue數(shù)據(jù)響應(yīng)式原理重寫函數(shù)實(shí)現(xiàn)數(shù)組響應(yīng)式監(jiān)聽

    Vue的通過數(shù)據(jù)劫持的方式實(shí)現(xiàn)數(shù)據(jù)的雙向綁定,即使用Object.defineProperty()來實(shí)現(xiàn)對(duì)屬性的劫持,但是Object.defineProperty()中的setter是無法直接實(shí)現(xiàn)數(shù)組中值的改變的劫持行為的,需要的朋友可以參考下
    2023-05-05
  • java web上傳文件和下載文件代碼片段分享

    java web上傳文件和下載文件代碼片段分享

    這篇文章主要為大家詳細(xì)介紹了java web上傳文件和下載文件代碼片段,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • SpringBoot?基于?MongoTemplate?的工具類過程詳解

    SpringBoot?基于?MongoTemplate?的工具類過程詳解

    MongoDB是一個(gè)高性能,開源,無模式的文檔型數(shù)據(jù)庫,是當(dāng)前NoSql數(shù)據(jù)庫中比較熱門的一種,這篇文章主要介紹了SpringBoot基于MongoTemplate的工具類,需要的朋友可以參考下
    2023-09-09
  • 詳解SpringBoot中@PostMapping注解的用法

    詳解SpringBoot中@PostMapping注解的用法

    在SpringBoot中,我們經(jīng)常需要編寫RESTful Web服務(wù),以便于客戶端與服務(wù)器之間的通信,@PostMapping注解可以讓我們更方便地編寫POST請(qǐng)求處理方法,在本文中,我們將介紹@PostMapping注解的作用、原理,以及如何在SpringBoot應(yīng)用程序中使用它
    2023-06-06
  • spring boot2.0圖片上傳至本地或服務(wù)器并配置虛擬路徑的方法

    spring boot2.0圖片上傳至本地或服務(wù)器并配置虛擬路徑的方法

    最近寫了關(guān)于圖片上傳至本地文件夾或服務(wù)器,上傳路徑到數(shù)據(jù)庫,并在上傳時(shí)預(yù)覽圖片。本文通過實(shí)例代碼給大家分享spring boot2.0圖片上傳至本地或服務(wù)器并配置虛擬路徑的方法,需要的朋友參考下
    2018-12-12

最新評(píng)論