Java 如何使用autodiscovery在Jersey中启用JSON自动编组?

Java 如何使用autodiscovery在Jersey中启用JSON自动编组?,java,jackson,jersey-2.0,Java,Jackson,Jersey 2.0,我正在尝试创建一个非常简单的示例rest服务,它生成JSON。我的理解是Jersey应该自动发现Jackson库(如果它们在类路径上),JSON编组应该自动发生 调用GET时报告以下错误。我是在使用适当的依赖项来实现这一点,还是缺少了一些更基本的东西 SEVERE: MessageBodyWriter not found for media type=application/json, type=class jsonex.Person, genericType=class jsonex.Pers

我正在尝试创建一个非常简单的示例rest服务,它生成JSON。我的理解是Jersey应该自动发现Jackson库(如果它们在类路径上),JSON编组应该自动发生

调用GET时报告以下错误。我是在使用适当的依赖项来实现这一点,还是缺少了一些更基本的东西

SEVERE: MessageBodyWriter not found for media type=application/json, type=class jsonex.Person, genericType=class jsonex.Person.
依赖关系

package jsonex;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.Collections;
import java.util.Set;

@ApplicationPath ("services")
public class PersonApp extends Application {

    @Override
    public Set<Object> getSingletons() {
        return Collections.singleton(new PersonService());
    }
}
package jsonex;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("people")
public class PersonService {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Person getPerson() {
        Person me = new Person();
        me.setFirstName("Dave");
        me.setLastName("R");
        return me;
    }
}
我正在使用Gradle应用gretty插件和以下依赖项:

dependencies {
    compile group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2+'
    runtime group: 'org.glassfish.jersey.containers', name: 'jersey-container-servlet', version: '2.23'
    runtime group: 'org.glassfish.jersey.media', name: 'jersey-media-json-jackson', version: '2.7'
}
应用程序类

package jsonex;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.Collections;
import java.util.Set;

@ApplicationPath ("services")
public class PersonApp extends Application {

    @Override
    public Set<Object> getSingletons() {
        return Collections.singleton(new PersonService());
    }
}
package jsonex;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("people")
public class PersonService {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Person getPerson() {
        Person me = new Person();
        me.setFirstName("Dave");
        me.setLastName("R");
        return me;
    }
}
POJO

package jsonex;

public class Person {
    String firstName, lastName;   

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

谢谢

为了在Jersey中使用/生成JSON,您必须在应用程序中注册Jackson功能()。它不像其他球衣功能那样可以自动发现

将模块添加到依赖项后,在/子类中注册:

@ApplicationPath(“/api”)
公共类MyApplication扩展了应用程序{
@凌驾

public Set>classes=new HashSet为了在Jersey中使用/生成JSON,您必须在应用程序中注册Jackson功能()。它不能像Jersey的其他一些功能那样自动发现

将模块添加到依赖项后,在/子类中注册:

@ApplicationPath(“/api”)
公共类MyApplication扩展了应用程序{
@凌驾

public Set>classes=new HashSet“它不像泽西岛的其他一些功能那样可以自动发现。”-不是这样。实际情况是,通过直接扩展
应用程序
类,这使得“发现”无效因此,OP最终将禁用对
JerseyFeature
的自动注册。因此,您显式注册它的解决方案是正确的,只是细节有点不正确:-)但是使用ResourceConfig,您将不需要注册它,因为它不会禁用自动发现库这是我提供的信息缺少,不幸的是,如果不手动注册JerseyFeature,我仍然无法使其工作?我现在使用ResourceConfig,如果我注册JerseyFeature,它可以正常工作,但如果我不注册,则会出现相同的错误。我想了解自动发现工作中缺少的内容。@daver这是您的版本。自动发现直到2.9才包括在内或者2.10。您应该使用与
jersey容器servlet相同的版本,不管怎样“它不像其他jersey功能那样可以自动发现”-不是真的。实际情况是,通过直接扩展
应用程序
类,这将使“发现”无效因此,OP最终将禁用对
JerseyFeature
的自动注册。因此,您显式注册它的解决方案是正确的,只是细节有点不正确:-)但是使用ResourceConfig,您将不需要注册它,因为它不会禁用自动发现库这是我提供的信息缺少,不幸的是,如果不手动注册JerseyFeature,我仍然无法使其工作?我现在使用ResourceConfig,如果我注册JerseyFeature,它可以正常工作,但如果我不注册,则会出现相同的错误。我想了解自动发现工作中缺少的内容。@daver这是您的版本。自动发现直到2.9才包括在内或者2.10。无论如何,您应该使用与
jersey容器servlet相同的版本