1

次のように宣言されたリソースを使用できるようにする xstream および jettison 拡張機能を備えた Restlet 2.1.0 の jse エディションを使用しています。

@Get("json")
public Customer retrieve();

これにより、JSON 文字列を取得するか、Customer オブジェクトを取得するかをクライアントが選択できるようになり、xstream+jettison がシリアライゼーション/デシリアライゼーションを実行します。

次のように宣言されたリソース メソッドもあります。

@Post
public Customer store(Customer customer);

次のようなものを使用して投稿できます。

clientResource.post(customer, Customer.class);

これはすべてうまくいくようです。ただし、うまくいかないのは、JSON 文字列をこの Post Restlet リソースに投稿するという最も単純なシナリオです。

次の JSON 文字列を投稿しようとすると:

{"com.redprairie.task.common.Customer":{"firstName":"George","lastName":"Shaw","birthDate":"1856-07-26 07:00:00.0 UTC","address":"Bibbs Hall Lane, Ayot St. Lawrence, AL6 9BX  United Kingdom"}}

このスタック トレースを取得します。

<failure message="Unsupported Media Type (415) - Unsupported Media Type" type="org.restlet.resource.ResourceException">Unsupported Media Type (415) - Unsupported Media Type
    at org.restlet.resource.ClientResource.doError(ClientResource.java:612)
    at org.restlet.resource.ClientResource.handleInbound(ClientResource.java:1203)
    at org.restlet.resource.ClientResource.handle(ClientResource.java:1070)
    at org.restlet.resource.ClientResource.handle(ClientResource.java:1087)
    at org.restlet.resource.ClientResource.post(ClientResource.java:1438)
    at com.redprairie.task.common.rest.RestletResource.post(RestletResource.java:99)
    at com.redprairie.task.common.rest.ServerResourceTest.testPostMethodUsingJSON(ServerResourceTest.java:165)

私が間違っている単純なことがあると思いますが、それが何であるかはわかりません。

4

2 に答える 2

1

問題を解決できました。

以下を使用して JSON 文字列を投稿しようとしていました。

String jsonString = "{some valid json}";
clientResource.post(jsonString, MediaType.APPLICATION_JSON);

それはうまくいきませんでした。なぜうまくいかなかったのか正確にはわかりませんが、次の方法でうまくいきます:

Representation rep = new StringRepresentation(jsonString, MediaType.APPLICATION_JSON);
clientResource.post(rep);
于 2012-10-15T23:14:21.557 に答える
0

POST リクエスト ヘッダーでcontent-typeを指定していますか?

于 2012-10-12T15:06:49.267 に答える