Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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
Java 如何将项目配置为使用JSON提供程序和restful web服务_Java_Json_Rest_Jersey_Fasterxml - Fatal编程技术网

Java 如何将项目配置为使用JSON提供程序和restful web服务

Java 如何将项目配置为使用JSON提供程序和restful web服务,java,json,rest,jersey,fasterxml,Java,Json,Rest,Jersey,Fasterxml,我正在尝试创建一个restful jersey Web服务。我必须将JSON对象传递给Web服务 @POST @Path("/saveVehicleTrackingData") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.TEXT_PLAIN) public String saveVehicleTrackingData(VehicleTracking vehicleTracking)

我正在尝试创建一个restful jersey Web服务。我必须将JSON对象传递给Web服务

    @POST
    @Path("/saveVehicleTrackingData")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.TEXT_PLAIN)
    public String saveVehicleTrackingData(VehicleTracking vehicleTracking) {
        return vehicleTracking.toString();
    }
我在项目中添加json提供程序时所做的唯一一件事就是添加了这个maven依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.5.1</version>
</dependency>
但是自动注册不起作用,我在尝试访问web服务时遇到了415个不支持的媒体类型错误。有关于如何正确注册json提供程序的指南吗?

要使“自动注册”起作用,需要将应用程序配置为扫描整个类路径。这可能不是最优的,大多数示例甚至不会提到如何做到这一点。但有一种方法是,不使用web.xml,而是使用带有
@ApplicationPath
注释的空
应用程序
子类

@ApplicationPath("/api")
public class JerseyConfig extends Application {}
这将足以启用类路径扫描。也许还有其他方法,但通常你会看到使用的是包扫描。在web.xml中,您可能会看到如下内容

<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>your.package.to.scan</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
如果您使用的是
ResourceConfig
子类,则可以
注册(JacksonJsonProvider.class)
注册(JacksonJaxbJsonProvider.class)
以获得JAXB注释支持

如果使用的是
应用程序
子类,则可以在重写的
getSingletons()方法中添加提供程序的实例


另外,如果您使用的是Jersey 2.9+,您可以使用


org.glassfish.jersey.media
泽西媒体公司
${jersey2.version}
在没有任何其他配置的情况下,它将自动注册。实际上,此依赖项使用了您在文章中提到的依赖项,但使用了特定于Jersey的自动发现功能来注册它。

非常感谢,将com.fasterxml.jackson.jaxrs.json添加到为我工作的参数值中。
<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>your.package.to.scan</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
    your.package.to.scan,
    com.fasterxml.jackson.jaxrs.json
</param-value>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey2.version}</version>
</dependency>