Как отправить данные JSON в качестве тела запроса в Apache CXF jax-rs (REST)

#java #json #jax-rs #cxf

#java #json #jax-rs #cxf

Вопрос:

Я использую Apache-CXF для создания веб-сервисов REST и пытаюсь отправить форму.

Сервер:
Это мой метод, который, как ожидается, получит данные в формате json.

 @POST
@Path("/addCustomer/")
@Consumes(MediaType.APPLICATION_JSON)

//{"Customer":{"name":"Some Name","id":6}}

public Customer addCustomer(Customer customer){

   logger.debug(customer);
   return customer;

}
  

Клиент:
Я использую плагин Firefox REST для отправки запроса:
Используя REST client, я опубликовал следующий json в качестве тела запроса:

 {"Customer":{"name":"Arnav Awasthi","id":6}}
  

Но я получаю "415: Unsupported Media Type" .

Комментарии:

1. в теле запроса необходимо иметь корневое имя, мне нужен тот же сервис, что и у вас, но я не получаю корневое имя в строке json моего запроса.

Ответ №1:

используйте restclient , плагин для fire fox и добавьте http-заголовки как Accept:application / json ,content-type: application / json.

Ответ №2:

Вы должны найти способ сообщить firefox установить тип содержимого в application / json. Ошибка указывает на то, что он отправляет что-то еще.

Ответ №3:

Извините за поздний ответ, но он может пригодиться другим.

Вы должны дважды проверить, аннотирован ли ваш класс Customer с помощью @XmlRootElement от JAXB, поскольку джексону это нужно для десериализации сообщения JSON.

Ответ №4:

Некоторое время назад у меня была такая же ошибка. Похоже, основной причиной было исключение «Для класса запроса не найдено средство чтения тела сообщения».

Согласно http://www.javatips.net/blog/2012/02/cxf-restful-tutorial Я добавил библиотеку jettison для решения этой проблемы.

Ответ №5:

Я столкнулся с той же проблемой, используя CXF 2.7.4 с Jasckon 2.X.X . Но это было исправлено, когда я обновился до CXF 2.7.7. Или используйте Jackson 1.9.X с CXF 2.7.4 .

Ответ №6:

Вы должны добавить пользовательские заголовки, чтобы сообщить клиенту, какие данные вы отправляете обратно, например: Имя заголовка: Заголовок типа содержимого-Значение: application / json

Ответ №7:

У меня была такая же проблема. Решением было удалить имя класса bean из строки json. В вашем случае Json, который должен быть отправлен в качестве тела, будет,

 {"name":"Arnav Awasthi","id":6}