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?
请耐心等待我,我知道已经有很多这样的问题,但我无法解决我的问题,这些问题看起来很基本,我不确定缺少什么(花了几个小时试图弄清楚这个问题出去)。我使用了以下 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?