我试图将JSON对象放入一个集合中(我选择了List)。通过使用适当的getter和setter创建BuiltCharacter,我已经能够将JSON响应解组为单个POJO。对于JSON元素数组,我尝试了以下方法:
List<BuiltCharacter> characters = response.readEntity(new GenericType<List<BuiltCharacter>>(){});
和
List<BuiltCharacter> characters = client.target(uri).request(MediaType.APPLICATION_JSON).get(new GenericType<List<BuiltCharacter>>(){});
使用这些方法得到了以下内容:
线程中的异常&#34; main&#34; java.lang.ClassCastException:BuiltCharacter无法强制转换为java.util.List
我最初使用Character作为类名,但提醒那是一个保留的类名。不过,我无法弄清楚这里发生了什么!
答案 0 :(得分:2)
关于赏金的答案,但它似乎与原帖有同样的问题
查看您提供的the link,所有示例都返回SalesType
,而不是List<SalesType>
。您不能指望SalesType
转换为List<SalesType>
。如果从资源类返回SalesType
,则会提供异常。
即使从原始帖子的the link开始,JSON也会以JSON对象的形式出现。 List
不映射到JSON对象({}
),而是映射到JSON数组([]
)。
如果您需要SalesType
的列表,则只需从资源中返回一个列表。以下是一个完整的例子
import java.util.*;
import javax.ws.rs.*;
import javax.ws.rs.core.*;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;
class SalesType {
public String test;
}
public class MOXyTest extends JerseyTest {
@Path("test")
public static class TestResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getSalesTypeList() {
List<SalesType> list = new ArrayList<>();
SalesType sales = new SalesType();
sales.test = "test";
list.add(sales);
list.add(sales);
return Response.ok(
new GenericEntity<List<SalesType>>(list){}).build();
}
}
@Override
public Application configure() {
return new ResourceConfig(TestResource.class);
}
@Test
public void testGetSalesTypeList() {
List<SalesType> list = target("test").request()
.get(new GenericType<List<SalesType>>(){});
for (SalesType sales: list) {
System.out.println(sales.test);
}
}
}
这些是我使用的两个依赖项(使用Jersey Test Framework)
<dependency>
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
<artifactId>jersey-test-framework-provider-inmemory</artifactId>
<version>${jersey2.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>${jersey2.version}</version>
</dependency>
通过返回上面示例中资源类中的sales
,可以轻松复制您的问题。上面的当前代码有效,但只是为了查看错误,如果替换GenericEntity
(这是Response
中返回的泛型类型的包装器),您将看到相同的错误
java.lang.ClassCastException: com.stackoverflow.jersey.test.SalesType
cannot be cast to java.util.List