Jersey with Grizzly:找不到媒体类型 =application/json 的 MessageBodyWriter

Jersey with Grizzly: Getting MessageBodyWriter not found for media type=application/json

请耐心等待我,我知道已经有很多这样的问题,但我无法解决我的问题,这些问题看起来很基本,我不确定缺少什么(花了几个小时试图弄清楚这个问题出去)。我使用了以下 Maven 原型来生成项目:

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 -DarchetypeGroupId=org.glassfish.jersey.archetype

在 pom.xml 文件中,我取消了对 moxy 依赖项的注释以支持 JSON

<dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
</dependency>

然后我添加了一个class,人如下:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Person {

  private String firstName;
  private String lastName;

  public Person(String firstName, String lastName) {
      this.firstName = firstName;
      this.lastName = 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;
  }
}

MyResource.java 如下所示:

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

@Path("myresource")
public class MyResource {

  @Path("/person")
  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public Person getPerson() {
      return new Person("FistName","LastName");
  }

}

然后我启动应用程序并发出以下命令以检索人员:

http://localhost:8080/myapp/myresource/person

设置看起来很简单,但它不起作用,但有以下例外:

org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo SEVERE: MessageBodyWriter not found for media type=application/json, type=class jersey.grizzly.Person, genericType=class jersey.grizzly.Person.

我无法弄清楚我缺少的是什么(并且已经查看了许多建议的答案但无济于事)并且可以使用另一组 eyes/perspective.

鉴于 MOXy 是 JAXB 的衍生物,并且 JAXB 的类型需要无参数(默认)构造函数,您的模型中应该有一个无参数构造函数 类。

另请参阅

  • Why does JAXB need a no arg constructor for marshalling?