【问题标题】:JAX-RS GET: MessageBodyReader not found for media type=text/plainJAX-RS GET:找不到媒体类型 = 文本/纯文本的 MessageBodyReader
【发布时间】:2017-06-05 18:34:35
【问题描述】:

我在尝试执行 JAX-RS GET 请求时遇到以下错误:

MessageBodyReader not found for media type=text/plain, type=class com.intuit.accountant.services.common.cdm.Job, genericType=class com.intuit.accountant.services.common.cdm.Job

下面是我的代码:

Response response = target("jobs/Hello")
        .request()
        .header("intuit_offeringid", "testOfferingId")
        .header(RequestHeaders.REALM, CommonUtil.DEFAULT_REALM_ID_FOR_INTUIT_EMPLOYEE)
        .header(RequestHeaders.AUTH, "002923")
        .header(RequestHeaders.TICKET,"00303")
        .get(Response.class);

这个错误是什么意思?我该如何解决这个问题?

【问题讨论】:

  • 你还能显示服务器代码吗?

标签: jersey javax


【解决方案1】:

您需要发布所有代码。该错误几乎肯定不会在您发布的代码示例中发生。 get(Response.class) 将其转换为通用 http 响应,您可以在其中查看响应负载、状态、响应标头等。

您没有发布的内容很可能看起来像这样。 response.readEntity(com.intuit.accountant.services.common.cdm.Job)

在这种情况下,您没有注册阅读器来将来自服务器的文本/纯文本响应转换为实体。我不知道响应是否应该是 json/xml 并且您正在接收文本,因为存在某种错误。您应该将响应检查为这样的文本,以查看您得到了什么。这可能会为您指明正确的方向。如果要获取文本,则必须编写 MessageBodyReader 的实现来将纯文本转换为实体。

试试这个...

System.out.println("Response body is " + response.getEntity(String.class));

【讨论】:

  • getEntity(Class<T> entityType) 方法在 Response 类中不存在,您的意思可能是 readEntity(Class<T> entityType)
  • 如果是 Jersey 2,那么就是 getEntity() stackoverflow.com/questions/27341788/…
  • 在 Jersey 2 中,response.readEntity(String.class) 行将响应正文作为字符串返回,在 Jersey 2 中,.getEntity 不接受任何参数并返回一个 Object,您可以调用 .toString (由于某种原因,它为我提供了一个 Connector 对象)
猜你喜欢
  • 2016-06-02
  • 2016-03-17
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 2014-06-19
相关资源
最近更新 更多