使用CXF DOSGI从RESTful服务返回JSON

ran*_*ath 6 cxf jax-rs dosgi

我有一个简单的服务,用JAX-RS注释注释并包含@Produces("application/json")注释.我在注册服务时设置了以下属性(我正在使用DS,但这不重要):

service.exported.interfaces -> *
service.exported.configs    -> org.apache.cxf.rs
org.apache.cxf.rs.address   -> myURI
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序时,我可以点击URL,但我的浏览器返回:

No message body writer has been found for response class MyClass.
Run Code Online (Sandbox Code Playgroud)

我的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.
Run Code Online (Sandbox Code Playgroud)

我阅读了文档并想到可能需要注册JSON提供程序.在May Activator中我添加了:

bundleContext.registerService(new String[] { "javax.ws.rs.ext.MessageBodyReader",
    "javax.ws.rs.ext.MessageBodyWriter" },
    new org.apache.cxf.jaxrs.provider.JSONProvider(), null);
Run Code Online (Sandbox Code Playgroud)

但这没有任何区别.

如何修复"没有为响应类MyClass找到消息正文编写器".错误信息?

Jef*_*ang 1

没有消息正文编写器意味着您的 json 提供程序不了解如何将您返回的类编组为 JSON。如果您使用默认的 JSONProvider,那么您使用的是 Jackson,它使用 JAXB 注释。换句话说,您返回的类应该在类级别具有 @XmlRootElement 注释。