首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将项目配置为将JSON提供程序与jersey-restful web服务一起使用

如何将项目配置为将JSON提供程序与jersey-restful web服务一起使用
EN

Stack Overflow用户
提问于 2015-04-06 06:20:58
回答 1查看 5.1K关注 0票数 3

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

代码语言:javascript
复制
    @POST
    @Path("/saveVehicleTrackingData")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.TEXT_PLAIN)
    public String saveVehicleTrackingData(VehicleTracking vehicleTracking) {
        return vehicleTracking.toString();
    }

在向项目中添加json提供程序时,我所做的唯一事情就是添加了这个maven依赖项:

代码语言:javascript
复制
<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.5.1</version>
</dependency>

正如此页所说:

代码语言:javascript
复制
    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.

但是自动注册不起作用,当我试图访问web服务时,我得到了415-不支持的媒体类型错误。是否有关于如何正确注册json提供程序的指南?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-06 06:38:03

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

代码语言:javascript
复制
@ApplicationPath("/api")
public class JerseyConfig extends Application {}

这将足够启用类路径扫描。也许还有其他的方法,但通常你会看到使用的是包扫描。在你的web.xml中,你可能会看到

代码语言:javascript
复制
<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包。如果希望它扫描Jackson类,可以将包添加到列表中,即

代码语言:javascript
复制
<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+,您可以只使用这种依赖性

代码语言:javascript
复制
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey2.version}</version>
</dependency>

没有任何其他配置,它将自动注册。实际上,这个依赖项使用您在文章中提到的依赖项,但使用泽西岛特定的自动发现功能来注册它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29466345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档