没有读者可用于接口列表和MIME媒体类型application / json与UTF-8

时间:2012-06-20 10:02:55

标签: java jersey jackson

我做了一个REST调用,我想找回包含MyClass对象列表的json。 实际上我得到了这个例外:

  

{“error”:“Java类java.util.List的消息体读取器,和   Java类型接口java.util.List和MIME媒体类型   应用/ JSON; charset = UTF-8不是   发现 “ ”类型“: ”com.sun.jersey.api.client.ClientHandlerException“, ”堆栈跟踪“:” com.sun.jersey.api.client.ClientHandlerException:   Java类java.util.List和Java类型的消息体读取器   接口java.util.List和MIME媒体类型application / json;   charset =未找到UTF-8 \ n \ tat   com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:550)\ n \达   com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:506)\ n \达   com.sun.jersey.api.client.WebResource.handle(WebResource.java:684)\ n \达   com.sun.jersey.api.client.WebResource.access $ 200(WebResource.java:74)\ n \达   com.sun.jersey.api.client.WebResource $ Builder.get(WebResource.java:507)\ n \达   .. [更多堆栈跟踪] ..}

代码是:

public List<'MyClass> getLIst()
{

ClientConfig config = new DefaultClientConfig();
config.getClasses().add(MyObjectMapper.class);
Client client = Client.create(config);

WebResource resource = client.resource(HOST_PATH).path(PATH).type(MediaType.APPLICATION_JSON_TYPE).accept(MediaType.APPLICATION_JSON_TYPE);

return resource.get(List.class);
}

@XmlRootElement
public class MyClass
{ ... }

我错过了什么吗?

1 个答案:

答案 0 :(得分:7)

是的,由于Java中的类型擦除,Jersey看不到列表的类型。您应该更改getList()方法的最后一行,如下所示:

return resource.get(new GenericType<List<MyClass>>() {});

然后它应该工作。