#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}