【发布时间】:2015-08-26 16:14:36
【问题描述】:
使用Jersey 2.6、MOXy 作为 JSON 提供者和 POJO 绑定。
尽管资源方法需要父类实例(方法参数),但如何发送一个会导致创建子类实例的 JSON 对象。
JSON 示例
下面的示例可以创建一个 Student 对象,并且可以将其传递给接受 Person 对象的资源。
{"name":"Jon Doe", "grade":"Excellent"}
资源 POST 方法
@POST
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Person test(Person student) {
System.out.println("Name: " + student.getName());
System.out.println("Garde: " + ((Student)student).getGrade());
return student;
}
具有以下 POJOs(省略了 getter 和 setter)。
public class Person {
String name;
}
public class Student extends Person {
String grade;
}
Web.XML
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>TestDrive</display-name>
<servlet>
<servlet-name>ServletAdaptor</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!--
MOXy JSON provider is used with Jersey which is registered automatically when in classpath.
Ref.: https://jersey.java.net/documentation/latest/media.html#json.moxy
-->
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.web.main</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.scanning.recursive</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServletAdaptor</servlet-name>
<url-pattern>/rs/*</url-pattern>
</servlet-mapping>
</web-app>
编辑
- 资源方法必须使用 Person 引用。
- Person 可以是抽象类,但不能是接口(它具有私有的非静态成员)。
【问题讨论】:
标签: json rest jersey pojo moxy