我正在尝试创建一个非常简单的REST服务器.我只有一个将返回字符串列表的测试方法.这是代码:
@GET
@Path("/test2")
public List test2(){
List list=new Vector();
list.add("a");
list.add("b");
return list;
}
它给出以下错误:
SEVERE: A message body writer for Java type, class java.util.Vector, and MIME media type, application/octet-stream, was not found
我希望JAXB有一个简单类型的默认设置,如String,Integer等.我猜不是.这是我想象的:
<Strings>
<String>a</String>
<String>b</String>
</Strings>
Run Code Online (Sandbox Code Playgroud)
使这种方法有效的最简单方法是什么?
我有一个像这样配置的jaxrs客户端:
<jaxrs:client id="opaRestProxy" name="opaRestProxy"
address="${endpoint}" serviceClass="com.test.RestProxy"
inheritHeaders="true" threadSafe="true">
<jaxrs:headers>
<entry key="Accept" value="application/json" />
<entry key="Content-Type" value="application/json" />
</jaxrs:headers>
</jaxrs:client>
Run Code Online (Sandbox Code Playgroud)
但是当我发送请求时,我得到以下异常:
Caused by: org.apache.cxf.interceptor.Fault: .No message body writer has been found for class : class com.test.RequestObject, ContentType : application/json.
at org.apache.cxf.jaxrs.client.ClientProxyImpl$BodyWriter.handleMessage(ClientProxyImpl.java:646)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:527)
... 47 more
Run Code Online (Sandbox Code Playgroud)
我的RestProxy类看起来像这样:
@Component
public interface RestProxy {
@POST
@Path("/getSomething")
String getSomething(RequestObject RequestObject);
}
Run Code Online (Sandbox Code Playgroud) 我收到以下错误:
WARNING: No message body writer has been found for response class ArrayList.Run Code Online (Sandbox Code Playgroud)
在以下代码上:
@GET
@Consumes("application/json")
public List getBridges() {
return new ArrayList(bridges);
}
Run Code Online (Sandbox Code Playgroud)
我知道CXF可以处理这种情况,因为我之前已经做过-使用一个在后台定义CXF和相关Maven工件的平台(即,我不知道它是如何完成的)。
因此,问题是:如何在不添加XML绑定或其他源代码修改的情况下使CXF支持此功能?
请注意,以下答案使用XML绑定解决了相同的问题,这对我而言并不令人满意: 没有为响应类ArrayList找到消息正文编写器