回答有关悬赏问题,但似乎与原帖中的问题相同
看了你提供的链接,所有示例都返回SalesType
,而不是List<SalesType>
。你不能期望将SalesType
转换为List<SalesType>
。如果从你的资源类返回SalesType
,则会出现异常。
即使从原帖的链接中,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
,我得到了
SalesType cannot be cast to java.util.List`。 - GeorgeList<SalesType>
。 - Paul Samsotha