我的jax-rs应用程序的方法:
@GET
@Produces (MediaType.APPLICATION_JSON)
public List <Document> getDocumentList(@HeaderParam("Range") String headerRange) {
int [] range = getRangeFromHeader(headerRange);
return facade.listByRange(range);
}
正常工作。但如对下列各项作出修改:
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getDocumentList(@HeaderParam("Range") String headerRange) {
int[] range = getRangeFromHeader(headerRange);
return Response.ok(
facade.listByRange(range))
.header("Content-Range", getContentRangeStr(range)).build();
}
我收到一个错误
...NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response
object of type: java.util.ArrayList of media type: application/json...
服务器Jboss 7.1.1
请告诉我怎么回事。
PS.sorry为我的糟糕英语。
发布于 2013-09-04 14:36:57
下面的片段应该能做到这一点。
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getDocumentList(@HeaderParam("Range") String headerRange) {
int[] range = getRangeFromHeader(headerRange);
return Response.ok(
new GenericEntity<List<Document>>( (List<Document>)facade.listByRange(range))
)
.header("Content-Range", getContentRangeStr(range)).build();
}
匿名GenericEntity
子类需要为编写器提供正确的类型信息(否则由编译器擦除)。
-编辑
代码使用org.jboss.resteasy.resteasy-jackson-provider
而不是org.jboss.resteasy.resteasy-jettison-provider
工作的原因在于这两个提供程序之间的根本区别:
发布于 2015-04-28 17:48:10
您缺少了一个图书馆,如下所述:
这意味着您在类路径中缺少了一个JSON库。杰克逊是我正在使用的一个,所以将其添加到您的pom.xml中会有帮助:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.10.1</version>
</dependency>
https://stackoverflow.com/questions/18613031
复制相似问题