0

REST サービスがあります。GET メソッドの入力タイプは次のList<String>とおりです。

@GET
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<myObject> getData(List<String> IDs) {
    ....
}

curl を使用してこの方法をテストしようとしました。さまざまなデータの組み合わせを使用しました。

curl -X GET --data-binary '{"IDs":["TestString1","TestString2"]}' -H "Content-Type: application/json" http://localhost:8080/myModule/rs/getData -v
                          '{"TestString1","TestString2"}'
                          '["TestString1","TestString2"]'
                           so on

しかし、私はいつも応答を受け取ります:

Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
or
Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token

入力を次のようにすることは可能List<String>ですか? curl リクエストは間違っていますか?

4

2 に答える 2

4

POST リクエストを送信しているようです:

--data-binary <データ>

(HTTP) これ は、追加の処理をまったく行わずに、指定されたとおりにデータを送信します。

-Xカスタム リクエスト タイプを設定するので、データを URL エンコードする必要があることを検出していないと思います。

-X, --request < コマンド >

(HTTP) HTTP サーバーとの通信時に使用するカスタム要求メソッドを指定します。指定されたリクエストは、他の方法で使用されるメソッド (デフォルトは GET) の代わりに使用されます。詳細と説明については、HTTP 1.1 仕様を参照してください。一般的な追加の HTTP リクエストには PUT と DELETE が含まれますが、WebDAV などの関連技術には PROPFIND、COPY、MOVE などがあります。

-G代わりに試してみてください:

-G, --get

このオプションを使用すると、-d、--data、または --data-binary で指定されたすべてのデータが、他の方法で使用される POST 要求の代わりに HTTP GET 要求で使用されます。データは「?」で URL に追加されます。セパレーター。

于 2012-11-26T22:15:24.463 に答える
0

私は解決策を見つけました:)

メソッド署名は

@GET
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<myObject> getData(@QueryParam("myParamName") List<String> IDs) {
    ....
}

カールリクエスト

curl -X GET -H "Content-Type: application/json" http://localhost:8080/myModule/rs/getData?myParamName={dfsf,ddsfdss,sdfsf} -v

できます :)

于 2012-11-26T22:47:20.923 に答える