JAX-RS GET: MessageBodyReader не найден для типа носителя = text/plain

Я получаю следующую ошибку при попытке выполнить запрос 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);

Что означает эта ошибка? Как я могу это исправить?


person eureka19    schedule 20.01.2017    source источник
comment
Можете ли вы также показать код сервера?   -  person Vikas Sachdeva    schedule 21.01.2017


Ответы (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));
person Chris Hinshaw    schedule 26.01.2017
comment
Метода getEntity(Class<T> entityType) не существует в классе Response, возможно, вы имели в виду readEntity(Class<T> entityType). - person Jefferson Lima; 30.07.2017
comment
Если это Джерси 2, то это getEntity() stackoverflow.com/questions/27341788/ - person Chris Hinshaw; 03.08.2017
comment
В Джерси 2 строка response.readEntity(String.class) вернет тело ответа в виде строки, в Джерси 2 .getEntity не принимает никаких аргументов и возвращает Object, для которого вы можете вызвать .toString (который по какой-то причине дает объект Connector для меня) - person svarog; 23.12.2019