JAX-RS NoMessageBodyWriterFoundFailure

2024-03-05

方法 我的 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.抱歉我的英语不好。


下面的代码片段应该可以解决问题。

@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子类需要为编写者提供正确的类型信息(否则被编译器删除)。

-- EDIT

您的代码使用的原因org.jboss.resteasy.resteasy-jackson-provider但不与org.jboss.resteasy.resteasy-jettison-provider两个提供商之间的根本区别在于:

  • 前者(jackson)依赖于 JavaBean 模型,发现要序列化的对象的属性,并且不需要类型信息
  • 后者(jettyson)依赖于 JAXB 注释,因此它需要底层类型信息,并由编译器删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAX-RS NoMessageBodyWriterFoundFailure 的相关文章

随机推荐