Я пытаюсь реализовать фреймворк Джерси, чтобы маршрутизировать наши клиентские запросы, используя спокойный подход. Я успешно создал методы, которые читают примитивные параметры, отправляют их, и они могут даже отвечать JSON с объекта. Однако одна вещь, которую я не смог сделать, - это прочитать (т. Е. Уничтожить) объект json из сообщения post/put или даже получить запрос. Я пробовал все, что я могу найти в Интернете, но безрезультатно. Из-за некоторых проблем работы я ограничен использованием Java 6 и Jersey 1.19. Также для нашей клиентской стороны мы используем ExtJS.Остальные веб-сервисы, использующие JSON с использованием Jersey и ExtJS
Мой запрос ExtJS отформатирован так:
Ext.Ajax.request({
url: 'rest/RestClass/getMessage',
method: 'PUT',
header: {
'Content-Type': 'application/json'
},
jsonData: {
status: {
id: 1,
description: 'Description'
}
},
success: function(response) {
var result = response.responseText;
},
failure: function(response) {
Ext.Msg.alert('Communication Error', 'Failed');
}
});
Насколько мой задний конец материал проходит у меня есть это:
@PUT
@Path("/getMessage")
@Consumes(MediaType.APPLICATION_JSON)
public void getMsg(JAXBElement<Status> status) {
System.out.println("status id = " + status.getValue().getId());
System.out.println("status description = " + status.getValue().getDescription());
}
Кроме того, мой статусный объект:
@XmlRootElement
public class Status{
private int id;
private String description;
public Status() {
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setDescription(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
Я правильно отобразил сервлет и т. Д., Так как я уже отправил успешные запросы. Моя проблема в том, что когда я пытаюсь отправить один с json-объектом в параметры, я получаю ошибки.
Поначалу я получал ошибку в недостающей библиотеке jackson
, хотя я использую jersey-bundle-1.19.jar
, который якобы содержит все необходимое. После загрузки jackson-jaxrs-1.9.13.jar
и добавить его в проект Сейчас я получаю эту ошибку:
A message body reader for Java class javax.xml.bind.JAXBElement, and Java type javax.xml.bind.JAXBElement, and MIME media type application/json was not found.
Я даже добавил некоторые jaxb
банки только в случае, но все еще получаю ту же ошибку. Многие примеры, которые я видел онлайн, не работали для меня. Кроме того, все они используют maven для управления зависимостями, к которому у нас нет доступа, поэтому я не могу быть уверенным, что мы используем те же библиотеки ...
Что я ищу здесь, это решение с теми вещами, которые у меня есть: Джерси 1.19 ExtJS 5 JDK 6 WebLogic 10.X
цель состоит в том, чтобы иметь возможность послать запрос с JSONObject в качестве параметра и его декодирования на стороне сервера в существующий тип объекта.
EDIT: Я даже добавил отображение POJO в моей web.xml (я нашел в Интернете, что необходимо для трикотажа для поддержки JSon отображения/объекта)
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
Еще есть та же самая проблема. Клиент дает мне 415 error for unsupported media type
Почему вы отправляете тип JAXBElement? Это должно быть только состояние. Например: public void getMsg (статус состояния). Вам также не требуется аннотация: @XmlRootElement –
facundofarias
Так как все примеры, которые я видел, имели эти аннотации. Я наконец нашел ответ и да, он не нуждается в этих аннотациях. Однако для конструктора моей модели нужна аннотация @JsonCreator. – Konstantine
Поскольку я привел вас к разрешению, и меньше всего вы можете поставить upvote! Не думаешь? :) – facundofarias