2015-04-06 38 views
2

我正在尝试创建一个平静的平台Web服务。我必须将JSON对象传递给webservice。如何配置项目以使用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> 

由于this page说:

Due to auto-registration, it should be possible to simply add Maven 
dependency (or include jar if using other build systems) and let JAX-RS 
implementation discover provider. If this does not work you need to consult 
documentation of the JAX-RS implementation for details. 

但是自动注册不是工作,我越来越415-不支持的媒体类型尝试访问网络服务时出错。有没有关于如何正确注册json提供者的指南?

回答

2

要使“自动注册”工作,应用程序需要配置为扫描整个类路径。这可能不是最佳的,大多数例子甚至不会提到如何做到这一点。但是,一种方法是,不要使用web.xml,并使用@ApplicationPath批注中的空子句Application

@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> 

这个扫描your.package.to.scan包。如果你想让它扫描杰克逊类,您可以在列表中添加的软件包,即

<param-name>jersey.config.server.provider.packages</param-name> 
<param-value> 
    your.package.to.scan, 
    com.fasterxml.jackson.jaxrs.json 
</param-value> 

如果您使用的是ResourceConfig子类,你可以register(JacksonJsonProvider.class)register(JacksonJaxbJsonProvider.class)用于JAXB注释支持。

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


顺便说一句,如果你正在使用泽西2.9+,你可以只使用this dependency

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>${jersey2.version}</version> 
</dependency> 

,没有任何其他的配置,它会自动注册。实际上,这种依赖关系使用您在帖子中提到的依赖关系,但使用泽西岛特定的自动发现功能进行注册。

+0

非常感谢,将** com.fasterxml.jackson.jaxrs.json **添加到为我工作的参数值中。 – 2015-04-06 08:12:15

相关问题