#json #jaxb
#json #jaxb
Вопрос:
У меня есть веб-служба RESTful, в которую я отправляю и помещаю Entry
объекты. Однако он ищет корневой элемент для JSON и XML, например:
{ "Entry": {
"name": "John Doe",
"phone_number": "555-1234",
.
.
.
}
Однако, основываясь на примерах, которые я видел с использованием ContextResolver
, TelephoneBookEntry
корневой элемент не должен требоваться при чтении или возврате Entry
объектов.
@Provider
@Produces({ APPLICATION.XML, APPLICATION.JSON })
public class JaxBEntryContextResolver implements ContextResovler<JAXBCONTEXT> {
private static final Class<?>[] classes = {Entry.class};
private static JAXBContext context;
static {
try {
context = JAXBContext.newInstance(classes);
} catch (JAXBException e) {
}
}
public JaxBEntryContextResolver() {
}
@Override
public JAXBContext getContext(Class<?> type) {
JAXBContext ret = null;
if(Arrays.asList(classes).contains(type)) {
ret = context;
}
return ret;
}
}
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Entry {
@XmlElement
private String name;
@XmlElement
private String phone_number;
.
.
.
}
Я думаю, что мой ContextResolver
класс довольно стандартный, поэтому я не уверен, что происходит не так. Я хотел бы иметь возможность публиковать JSON или XML без использования корневого элемента.
ОБНОВЛЕНИЕ: я также пробовал без использования `XmlRootElement, но это ничего не дало. Кроме того, я использую Jersey 2.17, поэтому я не уверен, почему разворачивание не происходит по умолчанию.
Комментарии:
1. какая это версия джерси? В новых версиях 2.x используется
jackson
или другой поставщик JSON, который не будет искать корневые элементы в JSON.2. Я использую 2.17 @ulab
Ответ №1:
Попробуйте добавить имя корневого элемента в аннотацию XmlRootElement
@XmlRootElement(name = "TelephoneBookEntry")
Комментарии:
1. Я пробовал это, но он все еще ищет корневой элемент, который должен присутствовать в JSON или XML