Java 使用Jersey解析XML中的复杂对象

Java 使用Jersey解析XML中的复杂对象,java,xml,xml-parsing,jersey-2.0,Java,Xml,Xml Parsing,Jersey 2.0,我正在使用Jersey并面临一个关于如何将复杂对象解析为xml格式的问题,请帮助我,非常感谢。 这里是细节 首先,我创建一个实体容器对象,如下所示: @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class RestResponse { //It can be any kinds of type, collection, single object etc private Object data;

我正在使用Jersey并面临一个关于如何将复杂对象解析为xml格式的问题,请帮助我,非常感谢。 这里是细节

首先,我创建一个实体容器对象,如下所示:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class RestResponse {

    //It can be any kinds of type, collection, single object etc
    private Object data;

    //... still have many properties

    public RestResponse() {
    }

    public RestResponse(Object data) {
        this.data = data;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}
这是我的一个实体类:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Entity1{

    private String name;

    private Map<String, Object> otherData = new HashMap<String, Object>();

    public Entity1(){
        this.name = "aaa";
        otherData.put("address", "XXXXX");
        otherData.put("age", 13);   
        //more...

        this.otherData = otherData
    }

    public Entity1(String name, Integer age){
        this.name = "aaa";
        otherData.put("address", "XXXXX");
        otherData.put("age", age);  

        this.otherData = otherData
    }

    public String getName() {
        return name;
    }

    public Map<String, Object> getOtherData() {
        return otherData;
    }
}
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
公共类实体1{
私有字符串名称;
私有映射otherData=newhashmap();
公共实体1(){
this.name=“aaa”;
其他数据。填写(“地址”、“XXXXX”);
其他数据。投入(“年龄”,13);
//更多。。。
this.otherData=otherData
}
public Entity1(字符串名称,整数期限){
this.name=“aaa”;
其他数据。填写(“地址”、“XXXXX”);
其他数据。放置(“年龄”,年龄);
this.otherData=otherData
}
公共字符串getName(){
返回名称;
}
公共地图getOtherData(){
返回其他数据;
}
}
这是我的资源类:

@Path("/test")
public class EntityResource{

    @GET
    @Path("test1")
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    public Response test1() {
        Entity1 entity = new Entity1();
        return Response.ok(new RestResponse(entity)).build();
    }

    @GET
    @Path("test2")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Response test2() {   
            List entities = new ArrayList<Entity1>();
            entities.add(new Entity1("E1"));
            entities.add(new Entity1("E2"));

            return Response.ok(new RestResponse(entities)).build();
    }
}
@Path(“/test”)
公共类实体资源{
@得到
@路径(“test1”)
@产生({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
公共响应测试1(){
Entity1实体=新的Entity1();
返回Response.ok(newresponse(entity)).build();
}
@得到
@路径(“test2”)
@产生({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
公共响应test2(){
列表实体=新的ArrayList();
增加(新实体1(“E1”);
增加(新实体1(“E2”);
返回Response.ok(新的Response(实体)).build();
}
}

用上面的代码配置jersey,当我需要json格式的响应时,它可以正常工作,但对于xml格式的响应,我总是得到500个错误,我是否遗漏了什么

经过一些研究,我找到了解决方案,答案很简单,我注册了JacksonXMLProvider.class作为XML提供者,希望这能帮助其他人。

经过一些研究,我找到了解决方案,答案很简单,我注册了JacksonXMLProvider.class作为XML提供者,希望这能帮助其他人