泽西与Grizzly:找不到媒体类型= application / json

时间:2016-07-02 05:37:20

标签: java json maven jersey-2.0 grizzly

拜托,请耐心等待我,我知道已经有这么多这样的问题我无法解决我的问题,这个问题看起来很基本,不确定遗漏了什么(花了好几个小时试图把这个想出来(解决;计算出;弄明白)。我使用以下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>

然后我添加了一个类,Person如下:

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");
  }

}

然后我启动应用程序并发出以下内容以检索Person:

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.

我无法弄清楚我错过了什么(并且已经通过许多建议的答案无效)并且可以使用另一组眼睛/视角。

1 个答案:

答案 0 :(得分:1)

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

另见

相关问题