1

我正在尝试使用 put 方法,使用 GenericEntity 将通用列表发送到球衣 servlet。我已经看到很多请求通用列表的示例,但没有一个提供它。

所以我服务器上的代码是:

@PUT
@Produces(MediaType.TEXT_HTML)
public String doPutHtml(GenericType<List<SystemInfo>> systemInfoList) {
    System.out.println(systemInfoList.toString());
    return "OK";
}

客户端发送 put 请求的代码:

WebResource ws;
Configuration conf = ConfigurationFactory.getConfigurationFactory()
            .getConfiguration();

Client client = Client.create();
ws = client.resource("http://" + conf.getDatacenterURL() + ":"+ conf.getDatacenterPort() + "/services/systemInfo");
GenericEntity entity = new GenericEntity<List<SystemInfo>>(systemInfoList) {};
String response = ws.accept(MediaType.TEXT_HTML).type(MediaType.APPLICATION_XML).put(String.class, entity);

当我运行客户端代码时,我得到了这个异常:

com.sun.jersey.api.client.ClientHandlerException: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class java.util.ArrayList, and MIME media type, application/octet-stream, was not found

所以我的问题是,是否可以通过这种方式发送通用列表?如果这是不可能的,还有其他选择吗?

4

2 回答 2

2

通过不同的组合收到完全相同的错误。我找到的答案似乎很简单。

上面的客户端设置和调用示例是正确的。具体来说...

GenericEntity entity = new GenericEntity<List<SystemInfo>>(systemInfoList) {};
String response = 
ws.accept(MediaType.TEXT_HTML).type(MediaType.APPLICATION_XML).put(String.class, entity);

GenericEntity 处理 List 到 restful 服务的转换。服务中只需要适当的列表。

@PUT
@Produces(MediaType.TEXT_HTML)
public String doPutHtml(List<SystemInfo> systemInfoList) {
    System.out.println(systemInfoList.toString());
    return "OK";
}
于 2014-10-01T22:32:41.240 回答
0

这个问题是在编组和编组对象期间产生的。这里有一个类似的线程讨论相同的问题。但是,这与 JAXB 相关。那里也尝试序列化列表对象并面临相同的问题。一旦你分析这个问题,在这里也很容易实现相同的技术。

使用 JAXB 解组/编组 List<String>

希望这会帮助你。

于 2012-05-02T07:34:44.360 回答