Java 如何将项目配置为使用JSON提供程序和restful web服务
我正在尝试创建一个restful jersey Web服务。我必须将JSON对象传递给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)
@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>