Restful介面傳入多引數的問題和解決方案

2021-07-24 11:31:19 字數 1890 閱讀 6620

restful風格的介面不支援多個引數

注:本文指的是通過json序列化引數的情況

乙個定義用來測試的myparam類

public

class

myparam

我在做測試的是用了chrome的外掛程式advanced rest client,可以模擬瀏覽器傳送各種請求,並自定義header和body。

測試的時候需要使用post方式,並在http請求header中加入

然後在htpp請求的body中,輸入json格式的引數,如

以下是幾種多引數介面的形式,以及輸入引數,以及解析結果。

@post

@path("demo")

public result function(string param1, string param2);

傳入的引數:

解析出來的引數:

param1:

""param2:

""

這樣的風格,傳輸過來的引數,讀取的時候會讀取request body中的inputstream,然後兩個引數迴圈解析,解析完第乙個引數的時候,會關閉inputstream,第二個引數再去讀取inputstream的時候,讀取到的就是空。

這樣的話,傳入的引數全部會賦值給第乙個string物件,而第二個string解析出來後就是空字串。

對於 第乙個引數是封裝物件的情況,能解析出來第乙個物件,而第二個引數也是拿不到。

這種情況下不會報錯,只是解析第乙個物件的時候沒有問題,解析第二個string拿到的就是空字串。

@post

@path("demo")

@consumes()

public result function(myparam myparam, string param);

傳入的引數:

,"string":"test"

解析出來的引數:

param1: 能正確解析物件myparam,其兩個屬效能正確賦值。

param2: ""

如果把兩個引數的位置交換,則會把傳入的引數全部解析給第乙個string,而解析第二個物件的時候,由於拿到的資料是空,所以會報錯。如下:

@post

@path("demo")

public result function(string param, myparam myparam);

傳入的引數:

,"string":"test"

解析出來的引數:

param1: ","string":"test""

param2: 會報錯

介面的定義形式要修改

@post

@path("demo")

public result function(@formparam(value="string1")string string1, @formparam(value="string2")string string2);

請求時,header引數要修改

請求body中使用form形式

string1=wo&string2=kan
然後就可以正確解析到兩個引數的值

解析出來的引數:

string1: wo

string2: kan

restful風格的介面

api與使用者的通訊協議,總是使用https協議。應該盡量將api部署在專用網域名稱之下。如果確定api很簡單,不會有進一步擴充套件,可以考慮放在主網域名稱下。應該將api的版本號放入url。v1 另一種做法是,將版本號放在http頭資訊中,但不如放入url方便和直觀。github採用這種做法。路徑...

後端nodejs的restful介面

var express require express express 讀取body中的json請求資料,前端post請求時傳送來的json物件 var bodyparser require body parser use bodyparser.urlencoded use bodyparser.j...

匿名函式的引數傳入

message hello example function use message echo example 輸出hello message world 輸出hello 因為繼承變數的值的時候是函式定義的時候而不是 函式被呼叫的時候 echo example 想要 在申明 匿名函式之後 使 匿名函...