12

JSON投稿を受け入れるRestlet関数を実装するにはどうすればよいですか? そして、カールを使用してこれをテストするにはどうすればよいですか?

ありがとう

4

6 に答える 6

10

Restlet 2 では、次のいずれかを実行できます。

  • でエンティティ メディア タイプの互換性をテストします@Post acceptRepresentation(Representation entity)

    @Post public Representation acceptRepresentation(Representation entity) throws ResourceException { if (entity.getMediaType().isCompatible(MediaType.APPLICATION_JSON)) { // ... } // ... }

  • または@Post、1 つまたは 2 つのパラメーターで使用します。

    @Post("json") 表現 acceptAndReturnJson(表現エンティティ) { // ... }

次のリンクを参照してください。

(Restlet 1 では、エンティティのタイプをテストする必要があります。)

于 2010-06-24T23:12:46.453 に答える
8

この応答を書いている時点(質問から2年後)では、Restlet 2.1は、JSONを適切に消費して応答するために、適切な依存関係が満たされている必要があります。ポイントは、「」応答を除けば、Unsupported media type内部で何が起こっているかについての手がかりはあまりないということです。

org.restlet.ext.jacksonJSONメディアタイプをアクティブ化するには、 ;への依存関係を含める必要があります。XMLとJSONの両方をサポートする必要がある場合は、Jackson FIRSTを含める必要があります。これはorg.restlet.ext.xstream、XStreamもJSON表現に対応しているためですが、実装はかなり貧弱です(レストレットのドキュメントで説明されているように、これはレストレットの作成者が推奨する順序です)。

次に、実際に注釈にメディアタイプを含める必要はなくContent-Type、curlリクエストに適切なヘッダーを含める必要があります。

curl -X post -H "Content-Type: application/json" http://localhost:8080/login -d @login.json
  • ここlogin.jsonに実際のJSONリクエストが含まれています。
  • ログインは、XMLとJSONの両方のメディアタイプに対応した、を受け入れて応答する@Post注釈付きのメソッドです。LoginRequestLoginResponse

この答えがいつか誰かに役立つことを願っています。:-)

于 2012-07-31T11:42:09.370 に答える
6

Daniel Vassallo によってリンクされた例は、フ​​ォームを使用して投稿されたデータを示しています。JSON の送信方法は次のとおりです。

@Post
public void acceptJsonRepresentation(JsonRepresentation entity) {

    JSONObject json = null;

    try {
        json = entity.getJsonObject();
        // business logic and persistence

    } catch (JSONException e) {
        setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
        return;
    } 

}

curl でテストするには:

curl -X POST <your url> -H "Content-Type: application/json" -d '{"key" : "value"}'

curl コマンドでデータを囲む単一引用符 ('') は重要です。

于 2011-01-24T18:05:43.963 に答える
4

この古い質問に関するいくつかの更新があります。Restlet は、Bean を含むメソッド シグネチャをサポートしています。そのような場合、Restlet は登録されたコンバーターを使用して、受信したペイロードを Bean インスタンスに変換/埋めることを試みます。これは、コンテンツをクライアントに送信する場合にも当てはまります。

リクエストを処理するメソッドのサンプルを次に示しますPOST

public class TestServerResource extends ServerResource {
    @Post
    public void test(TestBean bean) {
        System.out.println(">> bean = " + bean.getMessage());
    }
}

Bean は単純に次の構造を持つことができます。

public class TestBean {
    private String name;
    private String message;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

org.restlet.ext.jacksonこのようなメカニズムを機能させるには、クラスパス内に拡張子 Jackson ( ) を追加するだけです。対応するコンバーターが内部で自動的に登録されます。

curl リクエストは単純で、送信するデータを指定する必要があります

curl -X POST http://... -H "Content-Type: application/json" -d '{"name" : "myname","description":"my description"}'

お役に立てば幸いです、ティエリー

于 2015-04-22T12:37:22.800 に答える
2

以下は、POST 経由で JSON を受け入れる Restlet の適切で完全な例です。

また、cURL を使用して RESTful Web サービスをテストする方法に関する基本的なガイド:

于 2010-01-09T11:11:03.967 に答える
0
curl -u uid:4c521655 -X POST -H "Content-Type: application/json" -d "type=Big&data="{\"name\":\"test\"}"" --dump-header headers 'http://localhost:8190/appli/add'
于 2014-05-22T11:37:35.130 に答える