使用 Atom 的 Jersey 超媒体

发布于 2024-11-09 07:49:35 字数 988 浏览 4 评论 0 原文

每本有关 REST 的书籍都使用 来定义 RESTful 应用程序中的超媒体;但 Jersey(使用 JAXB)似乎没有这种支持。

我已经在 package-info.java @XmlSchema “nofollow noreferrer”>如此处所述;我还尝试扩展NamespacePrefixMapper 正如那里所解释的。但没有一个可以工作并最多输出这个:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer xmlns:ns2="http://www.w3.org/2005/Atom">
    <first-name>Roland</first-name>
    <ns2:link href="/customer/1" rel="self" />
</customer>

使用命名空间,因此使用 Atom,在 Jersey 中似乎是不可能的。我错过了什么吗?

ps。我使用 XSD 生成 @XmlElement 类,并且目前我创建自己的 Link 类。是否有架构或 JAR 可以做到这一点(jersey-atom maven 依赖项使用 rome 但没有任何帮助)

Every book on REST uses <atom:link href="..." rel="..."> to define Hypermedia in RESTful apps; but Jersey (with the use of JAXB) do not seems to have this support.

I've tried @XmlSchema in package-info.java as explained here; I've also tried extendingNamespacePrefixMapper as explained there. But none works and output this at best:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer xmlns:ns2="http://www.w3.org/2005/Atom">
    <first-name>Roland</first-name>
    <ns2:link href="/customer/1" rel="self" />
</customer>

Using namespace and, as a result, Atom, seems impossible in Jersey. I've miss something?

ps. I'me using a XSD to generate @XmlElement classes, and, for the moment, I create my own Link class. Is there a schema or a JAR to do that (jersey-atom maven dependency uses rome but without any help)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鸢与 2024-11-16 07:49:35

(假设您不关心名称空间前缀而只想创建链接)

这是我创建链接的方法。在我的资源类(球衣休息服务)中,我返回一个 java 对象(位于“Person”下方),该对象的类用 jaxb 注释进行修饰。属性之一返回原子链接对象。

@XmlRootElement(namespace = Namespace.MyNamespace)
public class Person implements Serializable {
    private AtomLinks links = null;

    @XmlElement(name = "link", namespace = Namespace.Atom)
    public AtomLinks getLink() {
        if (this.links == null) {
            this.links = new AtomLinks();
        }

        return this.links;
    }
..
}

@XmlAccessorType(value = XmlAccessType.NONE)
public class AtomLinks extends ArrayList<AtomLink> {
..
}

@XmlAccessorType(value = XmlAccessType.NONE)
public class AtomLink implements Serializable {
    @XmlAttribute(name = "href")
    public URI getHref() {
        return href;
    }
    @XmlAttribute(name = "rel")
    public String getRel() {
        return rel;
    }
    @XmlAttribute(name = "type")
    public String getType() {
        return type;
    }
    @XmlAttribute(name = "hreflang")
    public String getHreflang() {
        return hreflang;
    }
    @XmlAttribute(name = "title")
    public String getTitle() {
        return title;
    }
..
}

public class Namespace {
    public final static String Atom = "http://www.w3.org/2005/Atom";
..
}

在返回我的对象​​(“人”)之前,我填写链接,创建自链接和指向其他相关链接的链接。我利用 jersey 注入的 uriInfo 对象来获取基本 url。如果这有帮助,但您想要更多示例,请告诉我,我将填补空白。

(Assuming that you are not concerned with the namespace prefix and just want to create the links)

Here is my approach to creating the links. In my resource class (the jersey rest service), I return a java object (below "Person"), whose class is decorated with jaxb annotations. One of the properties returns atom link objects.

@XmlRootElement(namespace = Namespace.MyNamespace)
public class Person implements Serializable {
    private AtomLinks links = null;

    @XmlElement(name = "link", namespace = Namespace.Atom)
    public AtomLinks getLink() {
        if (this.links == null) {
            this.links = new AtomLinks();
        }

        return this.links;
    }
..
}

@XmlAccessorType(value = XmlAccessType.NONE)
public class AtomLinks extends ArrayList<AtomLink> {
..
}

@XmlAccessorType(value = XmlAccessType.NONE)
public class AtomLink implements Serializable {
    @XmlAttribute(name = "href")
    public URI getHref() {
        return href;
    }
    @XmlAttribute(name = "rel")
    public String getRel() {
        return rel;
    }
    @XmlAttribute(name = "type")
    public String getType() {
        return type;
    }
    @XmlAttribute(name = "hreflang")
    public String getHreflang() {
        return hreflang;
    }
    @XmlAttribute(name = "title")
    public String getTitle() {
        return title;
    }
..
}

public class Namespace {
    public final static String Atom = "http://www.w3.org/2005/Atom";
..
}

Prior to returning my object ("Person") I fill in the links, creating a self link and links to other related links. I utilize the uriInfo object that jersey injects to get the base url. If this is helpful but you would like more of the example, let me know and I will fill in the gaps.

洋洋洒洒 2024-11-16 07:49:35

如果我是对的,泽西岛有一种方法可以将链接注入到对象中。

请参阅:Jersey 2.9 用户指南第 6 章。

If I am right there is an approach in Jersey to inject the links to the objects.

See: Jersey 2.9 User Guide Chapter 6.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文