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);

这一切似乎都很好。然而,最简单的情况是不起作用的一件事,即向 Post Restlet 资源发布 JSON 字符串。

当我尝试发布以下 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 请求标头中指定内容类型?

于 2012-10-12T15:06:49.267 回答