java - Jersey 可以生成 List<T> 但不能 Response.ok(List<T>).build()?

标签 java json jaxb jersey generic-list

Jersey 1.6 可以生产:

@Path("/stock")
public class StockResource {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Stock> get() {
        Stock stock = new Stock();
        stock.setQuantity(3);
        return Lists.newArrayList(stock);
    }
}

但不能这样做:

@Path("/stock")
public class StockResource {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response get() {
        Stock stock = new Stock();
        stock.setQuantity(3);
        return Response.ok(Lists.newArrayList(stock)).build();
    }
}

给出错误:找不到 Java 类 java.util.ArrayList、Java 类型类 java.util.ArrayList 和 MIME 媒体类型 application/json 的消息正文编写器

这会阻止使用 HTTP 状态代码和 header 。

最佳答案

可以嵌入 List<T>通过以下方式在响应中:

@Path("/stock")
public class StockResource {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response get() {
        Stock stock = new Stock();
        stock.setQuantity(3);

        GenericEntity<List<Stock>> entity = 
            new GenericEntity<List<Stock>>(Lists.newArrayList(stock)) {};
        return Response.ok(entity).build();
    }
}

客户端必须使用以下行来获取 List<T> :

public List<Stock> getStockList() {
    WebResource resource = Client.create().resource(server.uri());
    ClientResponse clientResponse =
        resource.path("stock")
        .type(MediaType.APPLICATION_JSON)
        .get(ClientResponse.class);
    return clientResponse.getEntity(new GenericType<List<Stock>>() {
    });
}

关于java - Jersey 可以生成 List<T> 但不能 Response.ok(List<T>).build()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6081546/

相关文章:

json - 在 Selenium 中执行 JSON

java - 使 JSON 不转义正斜杠

java - 我制作了一个 CLI 计算器,我想知道,如何让程序无限期地接受数字,直到用户输入停止命令?

java - 在实现另一个类接口(interface)的类中使用属​​性

java - 使用 Apache Spark 读取 Json 文件

java - UnmarshalException 错误

xml - JAXB:如何围绕 XmlRootElement 添加包装器?

java - 参数化部分 xml 属性值

java - 是否有一个 Java 框架可以实现一个简单灵活的多用途比较器,可以与 Java 1.7 一起使用

java - 最佳并发锁 : one WRITE and infinite number of READ