我正在使用带有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)
我猜有些事我说错了,但我不确定它是什么。
答案 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?