问题描述
||
快速总结问题:
我需要以某种方式配置使用CXF的基于代理的客户端API实现的JAX-RS客户端,以将带有@FormParam注释的参数自动转换为JSON。
我已经在Apache CXF JAX-RS中创建了一些服务,该服务将几个潜在的复杂对象作为参数。通过为复杂的bean实现valueOf(String s),我可以将多个JSON编码对象传递给\“ method \”,而不仅仅是一个,通常情况下就是这样。
一个示例实现可以如下:
@Service(\"receiverService\")
@Path(\"/receiver\")
public class ObjectReceiverService {
@POST
@Path(\"jsonTest\")
@Produces(\"application/json\")
public MyObject jsonTest(@FormParam(\"myPrimitive\") int myPrimitive,@FormParam(\"myComplex\") MyObject myComplex) {
return myComplex;
}
...//
}
//domain class with Mapper from Jackson
public class MyObject {
public String foo;
public String bar;
public String baz;
public static MyObject valueOf(String s) throws Exception {
return new ObjectMapper().readValue(s,MyObject.class);
}
...//implementation of equals() etc.
}
这工作得很好。到目前为止,我已经通过使用低级的东西对其进行了测试。使用Jackson \'s ObjectMapper等手动构造查询字符串。示例:
//test class with lots of manual setup using WebClient
public class ObjectReceiverServiceTest {
@Before
public void setup() {
ProviderFactory.getSharedInstance().registerUserProvider(new JacksonJsonProvider());
}
@org.junit.Test
public void jsonTest1_recievingSameObject() throws Exception {
String url = \"http://localhost:8080/\";
String path = \"rest/receiver/jsonTest\";
MyObject myObjectToSend = new MyObject();
MyObject result = new MyObject();
myObjectToSend.foo = \"foo\";
myObjectToSend.bar = \"bar\";
myObjectToSend.baz = \"baz\";
WebClient client = WebClient.create(url);
client.path(path);
client.accept(\"application/json\").type(MediaType.APPLICATION_FORM_URLENCODED_TYPE);
Response r = client.post(\"myPrimitive=123&myComplex=\" + new ObjectMapper().writeValueAsString(myObjectToSend));
result = new ObjectMapper().readValue(new BufferedReader(new InputStreamReader((InputStream) r.getEntity())).readLine(),MyObject.class);
assertEquals(myObjectToSend,result);
}
我想做的是使用基于代理的api,如CXF文档中所示。这样会更清洁,更快速地实施。以前的测试可能是这样的
@org.junit.Test
public void jsonTest2_recievingSameObject() throws Exception {
String url = \"http://localhost:8080/rest\";
ObjectReceiverService service = JAXRSClientFactory.create(url,ObjectReceiverService.class);
MyObject myObjectToSend = new MyObject();
myObjectToSend.foo = \"foo2\";
myObjectToSend.bar = \"bar2\";
myObjectToSend.baz = \"baz2\";
MyObject result = service.jsonTest(123,myObjectToSend);
assertEquals(myObjectToSend,result);
}
今天,这可能会在org.apache.cxf.jaxrs.provider.FormEncodingProvider.writeTo(..)中引发WebApplicationException,因为它可能只是期望的原语。
我不太确定该如何处理。有任何想法吗?是否可以以某种方式进行注释,例如@JSONtoString,以某种方式将对象toString方法神奇地替换为JSON?如String toString(){返回新的ObjectMapper.writeValueAsString(this); }
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)