如何利用泽西岛的对象转换?

时间:2013-06-14 01:24:03

标签: xml json jersey jackson jersey-client

我在泽西岛注释了我的POJO,我有这样的测试方法:

@POST
@Path("/test/pojo/transformation")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_XML)
public MyPojo testSerializationForLineItemRequestPojo(MyPojo myPojo)
{
    return myPojo;
}

通过webrequest接受POJO的JSON风格并返回相同pojo的XML版本。通常我这样做是为了弄清楚我是否正确地注释了所有对象,以便在它们预期的xml和json格式之间来回切换。

但现在我需要在我的一个webservice方法中本地执行这样的转换。

问:我如何利用上面提到的对象转换基础设施?

我不想诉诸黑客......比如对 进行 webservice调用,然后通过一个暴露的方法,以便它可以转换并将对象返回给我。


更新#1

想到的一个想法是:

@Produces(MediaType.APPLICATION_JSON)
private MyPojo convert(String data)
{
    new InBoundHeaders().add("Content-Type", MediaType.APPLICATION_XML);
    ClientResponse cr = new ClientResponse(
            Response.Status.OK,
            new InBoundHeaders().add("Content-Type", MediaType.APPLICATION_XML),
            null,
            messageBodyWorkers_singleton);
    return cr.getEntity(MyPojo.class);
}

可以使用假ClientResponse来快速进入现有的球衣基础设施并将xml转换为POJO然后再转换为json ...并且该方法不需要作为web服务公开。但我不确定我是否可以直接进入Jersey的预先存在/预先配置的MessageBodyWorkers实施(我称之为messageBodyWorkers_singleton只是为了得到我的观点),这是在泽西服务器启动时免费提供的。有关如何自动连接MessageBodyWorkers参考的任何想法吗?

1 个答案:

答案 0 :(得分:0)

我正在谈论/大声询问的方法......工作,一个是黑客,另一个是我可以忍受的东西。并且都利用泽西岛来做这项工作:

方法A(更好): https://gist.github.com/pulkitsinghal/5779383#file-approach_a-java

方法B(hack~ish ......可能性能较差): https://gist.github.com/pulkitsinghal/5779383#file-approach_b-java