使用xstream和jettison将JSON发布到Restlet会导致“不支持的媒体类型”

时间:2012-10-12 02:42:22

标签: restlet restlet-2.0

我正在使用带有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字符串发布到此Postlet资源的最简单方案。

当我尝试发布以下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)

我猜有些事我说错了,但我不确定它是什么。

2 个答案:

答案 0 :(得分:1)

我能够解决我的问题。

我试图使用:

发布JSON字符串
String jsonString = "{some valid json}";
clientResource.post(jsonString, MediaType.APPLICATION_JSON);

那不起作用。不确定它为什么不起作用,但按照以下方式进行:

Representation rep = new StringRepresentation(jsonString, MediaType.APPLICATION_JSON);
clientResource.post(rep);

答案 1 :(得分:0)

您是否在POST请求标头中指定了content-type