JSON投稿を受け入れるRestlet関数を実装するにはどうすればよいですか? そして、カールを使用してこれをテストするにはどうすればよいですか?
ありがとう
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 では、エンティティのタイプをテストする必要があります。)
この応答を書いている時点(質問から2年後)では、Restlet 2.1は、JSONを適切に消費して応答するために、適切な依存関係が満たされている必要があります。ポイントは、「」応答を除けば、Unsupported media type
内部で何が起こっているかについての手がかりはあまりないということです。
org.restlet.ext.jackson
JSONメディアタイプをアクティブ化するには、 ;への依存関係を含める必要があります。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リクエストが含まれています。@Post
注釈付きのメソッドです。LoginRequest
LoginResponse
この答えがいつか誰かに役立つことを願っています。:-)
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 コマンドでデータを囲む単一引用符 ('') は重要です。
この古い質問に関するいくつかの更新があります。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"}'
お役に立てば幸いです、ティエリー
以下は、POST 経由で JSON を受け入れる Restlet の適切で完全な例です。
また、cURL を使用して RESTful Web サービスをテストする方法に関する基本的なガイド:
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'