Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jersey解决java rest服务中产生xml的问题?_Java_Json_Xml_Web Services_Jersey - Fatal编程技术网

如何使用jersey解决java rest服务中产生xml的问题?

如何使用jersey解决java rest服务中产生xml的问题?,java,json,xml,web-services,jersey,Java,Json,Xml,Web Services,Jersey,我正在使用jersey创建简单的web服务 这里所有的工作都正常,但我不能以xml格式获取数据。现在我使用json格式显示数据。对于这个json显示,我添加了jersey media moxy依赖项,我不知道我需要添加任何xml依赖项 <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-jaxb</artifac

我正在使用jersey创建简单的web服务

这里所有的工作都正常,但我不能以xml格式获取数据。现在我使用json格式显示数据。对于这个json显示,我添加了jersey media moxy依赖项,我不知道我需要添加任何xml依赖项

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-jaxb</artifactId>
    <version>2.16</version>
</dependency>
这是我的pom.xml

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey</groupId>
            <artifactId>jersey-bom</artifactId>
            <version>${jersey.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <!-- use the following artifactId if you don't need servlet 2.x compatibility -->
        <!-- artifactId>jersey-container-servlet</artifactId -->
    </dependency>
    <!-- uncomment this to get JSON support -->
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
    </dependency>

    <dependency>
        <groupId>net.vz.mongodb.jackson</groupId>
        <artifactId>mongo-jackson-mapper</artifactId>
        <version>1.4.2</version>
    </dependency>
</dependencies>

org.glassfish.jersey
针织面料
${jersey.version}
聚甲醛
进口
org.glassfish.jersey.containers
jersey容器servlet核心
org.glassfish.jersey.media
泽西媒体公司
net.vz.mongodb.jackson
蒙戈·杰克逊地图绘制者
1.4.2
这是我的资源

@Path("student")
public class StudentResource {

private static Map<Integer, Students> stud_data = new HashMap<Integer, Students>();

static{
    for(int i = 0; i < 10; i++){

        Students stu = new Students();
        int id = i+1;
        stu.setId(id);
        stu.setName("My Student "+id);
        stu.setAge(new Random().nextInt(15)+1);

        stud_data.put(id, stu);
    }
}

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Students> getall(){
    return new ArrayList<Students>(stud_data.values());
}
}
@Path(“学生”)
公共班级学生资源{
私有静态映射stud_data=newhashmap();
静止的{
对于(int i=0;i<10;i++){
学生stu=新生();
int id=i+1;
斯图·塞迪德(id);
stu.setName(“我的学生”+id);
stu.setAge(new Random().nextInt(15)+1);
螺柱数据输入(id,stu);
}
}
@得到
@产生(MediaType.APPLICATION_JSON)
公共列表getall(){
返回新的ArrayList(stud_data.values());
}
}
请帮助我,我如何像json一样显示xml数据

根据,您可以使用Moxy或JAXB RI将对象转换为xml文档。如果你想使用Moxy,你需要做一些进一步的配置。但如果您想使用引用实现,请添加jaxb依赖项

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-jaxb</artifactId>
    <version>2.16</version>
</dependency>
然后,必须对服务进行注释,使其既可以使用XML文档,也可以生成XML文档。比如说

@Path("student")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public class StudentResource {

}
最后,您的客户机必须使用适当的头,告诉服务器它正在执行什么样的请求以及它正在等待什么样的响应。这是这些标题

Content-Type: application/xml
Accept: application/xml
这意味着为了运行getAllStudents服务,您需要执行以下操作(更新:不需要内容类型,因为get中没有内容。感谢@peeskillet的评论)

根据,您可以使用Moxy或JAXB RI将对象转换为xml文档。如果你想使用Moxy,你需要做一些进一步的配置。但如果您想使用引用实现,请添加jaxb依赖项

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-jaxb</artifactId>
    <version>2.16</version>
</dependency>
然后,必须对服务进行注释,使其既可以使用XML文档,也可以生成XML文档。比如说

@Path("student")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public class StudentResource {

}
最后,您的客户机必须使用适当的头,告诉服务器它正在执行什么样的请求以及它正在等待什么样的响应。这是这些标题

Content-Type: application/xml
Accept: application/xml
这意味着为了运行getAllStudents服务,您需要执行以下操作(更新:不需要内容类型,因为get中没有内容。感谢@peeskillet的评论)

根据,您可以使用Moxy或JAXB RI将对象转换为xml文档。如果你想使用Moxy,你需要做一些进一步的配置。但如果您想使用引用实现,请添加jaxb依赖项

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-jaxb</artifactId>
    <version>2.16</version>
</dependency>
然后,必须对服务进行注释,使其既可以使用XML文档,也可以生成XML文档。比如说

@Path("student")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public class StudentResource {

}
最后,您的客户机必须使用适当的头,告诉服务器它正在执行什么样的请求以及它正在等待什么样的响应。这是这些标题

Content-Type: application/xml
Accept: application/xml
这意味着为了运行getAllStudents服务,您需要执行以下操作(更新:不需要内容类型,因为get中没有内容。感谢@peeskillet的评论)

根据,您可以使用Moxy或JAXB RI将对象转换为xml文档。如果你想使用Moxy,你需要做一些进一步的配置。但如果您想使用引用实现,请添加jaxb依赖项

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-jaxb</artifactId>
    <version>2.16</version>
</dependency>
然后,必须对服务进行注释,使其既可以使用XML文档,也可以生成XML文档。比如说

@Path("student")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public class StudentResource {

}
最后,您的客户机必须使用适当的头,告诉服务器它正在执行什么样的请求以及它正在等待什么样的响应。这是这些标题

Content-Type: application/xml
Accept: application/xml
这意味着为了运行getAllStudents服务,您需要执行以下操作(更新:不需要内容类型,因为get中没有内容。感谢@peeskillet的评论)


@products(MediaType.APPLICATION\u XML)
?您可以有多个媒体类型,只需将它们添加到以逗号分隔的
{…}
之间。您还需要确保在所需类型的请求上设置
Accept
头。我只给出@products(MediaType.APPLICATION_XML),但显示错误消息HTTP Status 500-Internal Server error添加其中一个。但是使用泛型类型
Exception
,即
exceptionapper
。我的猜测是,抛出的JAXB异常不是由异常映射程序处理的。只需在映射器中打印stacktrace。如果您看到stacktrace,请发布它。还要确保
学生
类用
@XmlRootElement
@products(MediaType.APPLICATION\u XML)
注释?您可以有多个媒体类型,只需将它们添加到以逗号分隔的
{…}
之间。您还需要确保在所需类型的请求上设置
Accept
头。我只给出@products(MediaType.APPLICATION_XML),但显示错误消息HTTP Status 500-Internal Server error添加其中一个。但是使用泛型类型
Exception
,即
exceptionapper
。我的猜测是,抛出的JAXB异常不是由异常映射程序处理的。只需在映射器中打印stacktrace。如果您看到stacktrace,请发布它。还要确保
学生
类用
@XmlRootElement
@products(MediaType.APPLICATION\u XML)
注释?您可以有多个媒体类型,只需将它们添加到以逗号分隔的
{…}
之间。您还需要确保将请求的
Accept
头设置为您想要的类型