java-如何完全匹配cxf的json输出?

编辑:我很困惑-使用的是CXF,而不是球衣.有没有一种方法可以将带注释的对象转换为类似于杰克逊的ObjectMapper的json?

原始消息:

你好
我们当前正在使用jaxrs将我们的Web响应转换为xml / json.但是,我现在想做的是使用ObjectMapper(?)在我的代码中生成一个等效的json字符串.

例如,给定控制器和带有jaxb注释的返回对象:

@Path("/foo")
@Produces({"application/json", "application/xml"})
public class FooController {

    @GET
    @Path("/some_action")
    public TopDTO someAction(@QueryParam("arg") String arg) {
        ...
    }
}

@XmlRootElement(name="topDTO")
@XmlAccessorType(XmlAccessType.NONE)
public class TopDTO {
    ...
    @XmlAttribute(name="attr")
    public String getAttr() {
        return "blah";
    }
    @XmlElement(name="innerDTO")
    public InnerDTO getInnerDTO() {
       ...
    }
}

@XmlRootElement(name="innerDTO")
@XmlAccessorType(XmlAccessType.NONE)
public class InnerDTO {
    ...  
}

击中http://myserver/…/foo.json会发出一些漂亮的json:

{"topDTO":{"@attr":"blah","innerDTO":...}}

现在,我希望能够在内部生成该确切的json:

ObjectMapper mapper = new ObjectMapper();
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
mapper.getSerializationConfig().setSerializationInclusion(Inclusion.ALWAYS);            
mapper.getSerializationConfig().set(SerializationConfig.Feature.AUTO_DETECT_FIELDS, false);
mapper.getSerializationConfig().set(SerializationConfig.Feature.WRAP_ROOT_VALUE, true);
return mapper.writeValueAsString(snapshotDTO);

但是,这似乎根本不起作用.大多数带注释的属性和元素都丢失,属性没有以jaxrs输出作为前缀的“ @”,等等.

我想念一些简单的东西吗? jaxrs本身如何将带注释的对象转换为json字符串?

谢谢!

解决方法:

使用JSONJAXBContextcreate a marshaller,并使用它将您的对象序列化为JSON格式.我认为您不需要杰克逊.

  JSONJAXBContext c = create the context
  JSONMarshaller m = c.createJSONMarshaller();
  YourJAXBObject obj = your object
  StringWriter writer = some writer
  m.marshallToJSON(obj, writer);
上一篇:java – 是否可以删除WS结果中的包装元素?


下一篇:java-更改,修改和重新打包CXF-API源文件