【发布时间】:2014-12-22 18:50:37
【问题描述】:
我有一个使用 Jersey 构建的 RESTful Java Web 服务。它的客户端使用以下方法定义资源:
@Override
public String saveWidget(Widget widget) {
return webResource.path("user").type(MediaType.APPLICATION_JSON).entity(widget).post(String.class, Widget.class);
}
那么,使用这个客户端的驱动程序:
public class Driver {
public static void main(String[] args) {
WidgetClient client;
WidgetClientBuilder builder = new WidgetClientBuilder();
client = builder.withUri("http://localhost:8080/myapi").build();
Widget w = getSomehow();
String widgetUri = client.getWidgetResource().saveWidget(w);
System.out.println("Widget was saved URI was returned: " + widgetUri);
}
}
当我运行它时,我得到:
Exception in thread "main" com.sun.jersey.api.client.UniformInterfaceException: POST http://localhost:8080/myapi/widget returned a response status of 400 Bad Request
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:688)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570)
at com.my.myapi.WidgetResource.saveWidget(WidgetResource.java:27)
at com.my.myapi.Driver.main(Driver.java:32)
我知道服务端点是有效的,因为我可以从另一个(非 Java)Web 客户端访问它而不会出现问题。这意味着我的 Widget 实例格式错误,或者我的 Java 客户端方法 (saveWidget) 有问题。我通过将w Widget 序列化为 JSON,然后将其复制到我的非 Java Web 客户端并发布到同一个端点(没有出现问题)来排除我的w Widget 坏了。所以这告诉我我的客户端方法配置错误。有什么想法吗?
【问题讨论】:
-
这里没有足够的信息,发布或链接小部件类,成功的非java请求以及您注册的任何消息正文阅读器