Возврат JSON из службы RESTful с использованием CXF DOSGI
У меня есть простой сервис, который аннотируется аннотациями JAX-RS и включает @Produces("application/json")
аннотаций. При регистрации службы я настроил следующие свойства (я использую DS, но это не должно иметь значения):
service.exported.interfaces -> *
service.exported.configs -> org.apache.cxf.rs
org.apache.cxf.rs.address -> myURI
Когда я запускаю свое приложение, я могу нажать на URL, но мой браузер возвращает:
No message body writer has been found for response class MyClass.
Моя консоль OSGi отображает:
Jan 11, 2012 2:29:48 PM org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor writeResponseErrorMessage
WARNING: No message body writer has been found for response class MyClass.
Я прочитал документацию и подумал, что, возможно, мне нужно зарегистрировать провайдера JSON. В мае Активатор я добавил:
bundleContext.registerService(new String[] { "javax.ws.rs.ext.MessageBodyReader",
"javax.ws.rs.ext.MessageBodyWriter" },
new org.apache.cxf.jaxrs.provider.JSONProvider(), null);
но это не имеет никакого значения.
Как исправить сообщение "Не найдено средство записи тела сообщения для класса ответа MyClass". сообщение об ошибке?
1 ответ
Отсутствие средства записи тела сообщения означает, что ваш поставщик json не понимает, как упорядочить ваш класс, который вы вернули в JSON. Если вы используете JSONProvider по умолчанию, то вы используете Джексона, который использует аннотации JAXB. Другими словами, возвращаемый класс должен иметь аннотацию @XmlRootElement на уровне класса.