2.7.12. RESTEasy Atom 支持
RESTEasy Atom API 和提供程序是 RESTEasy 定义为代表 Atom 的简单对象模型。API 的主要类位于 org.jboss.resteasy.plugins.providers.atom
软件包中。RESTEasy 使用 JAXB 来托管和卸载 API。提供程序基于 JAXB,不限于使用 XML 发送 Atom 对象。RESTEasy 的所有 JAXB 提供程序都可以被 Atom API 和提供程序(包括 JSON)重复利用。
import org.jboss.resteasy.plugins.providers.atom.Content; import org.jboss.resteasy.plugins.providers.atom.Entry; import org.jboss.resteasy.plugins.providers.atom.Feed; import org.jboss.resteasy.plugins.providers.atom.Link; import org.jboss.resteasy.plugins.providers.atom.Person; @Path("atom") public class MyAtomService { @GET @Path("feed") @Produces("application/atom+xml") public Feed getFeed() throws URISyntaxException { Feed feed = new Feed(); feed.setId(new URI("http://example.com/42")); feed.setTitle("My Feed"); feed.setUpdated(new Date()); Link link = new Link(); link.setHref(new URI("http://localhost")); link.setRel("edit"); feed.getLinks().add(link); feed.getAuthors().add(new Person("John Brown")); Entry entry = new Entry(); entry.setTitle("Hello World"); Content content = new Content(); content.setType(MediaType.TEXT_HTML_TYPE); content.setText("Nothing much"); entry.setContent(content); feed.getEntries().add(entry); return feed; } }
2.7.12.1. 使用 JAXB 和 Atom Provider
org.jboss.resteasy.plugins.providers.atom.Content
类允许您解封和marshal JAXB 注解为内容主体的对象。
示例:与客户进行输入
@XmlRootElement(namespace = "http://jboss.org/Customer") @XmlAccessorType(XmlAccessType.FIELD) public class Customer { @XmlElement private String name; public Customer() { } public Customer(String name) { this.name = name; } public String getName() { return name; } } @Path("atom") public static class AtomServer { @GET @Path("entry") @Produces("application/atom+xml") public Entry getEntry() { Entry entry = new Entry(); entry.setTitle("Hello World"); Content content = new Content(); content.setJAXBObject(new Customer("bill")); entry.setContent(content); return entry; } }
Content.setJAXBObject()
方法允许您将发送到 JAXB 的内容对象相应地指定为 marshal。如果您使用的与 XML 不同的基本格式(即 application/atom+json
),则附加的 JAXB 对象会以相同的格式托管。如果您有 Atom 文档作为输入,您也可以使用
对象。
Content.
getJAXBObject(Class clazz)方法从内容中提取 JAXB
示例:属性文档提取客户对象
@Path("atom") public static class AtomServer { @PUT @Path("entry") @Produces("application/atom+xml") public void putCustomer(Entry entry) { Content content = entry.getContent(); Customer cust = content.getJAXBObject(Customer.class); } }