我有一个简单的服务,它使用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.
我阅读documentation并认为我可能需要注册一个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);
但这没有任何区别。
如何修复“没有为响应类MyClass找到消息正文编写器”。错误消息?
答案 0 :(得分:1)
没有消息正文编写器意味着您的json提供程序不了解如何封送您返回JSON的类。如果您使用的是默认的JSONProvider,那么您使用的是Jackson,它使用JAXB注释。换句话说,您返回的类应该在类级别上有一个@XmlRootElement注释。