如何使用 Apache Jersey 在 REST 句柄的 POST 中捕获哈希图

发布于 2024-12-14 01:18:56 字数 641 浏览 1 评论 0原文

我希望在我的 POST 处理程序中捕获这种格式的 XML (HashMap)

<entries>
  <entry>
    <id>1</id>
    <labels>
      <label>label1</label>
      <label>label2</label>
      ...
    </labels>
  <entry>
  ...
<entries>

我希望使用 Apache Jersey 的 POST 处理程序看起来像这样

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void createEntries(@MagicAnnotation HashMap<id, List<label>> entryMap){
    }

我能得到的最接近的是什么?

我愿意接受 HashMap 到 XML 的更好表示。我只是不想手动解析 xml 并且也想捕获等效的 JSON。 我不确定是否可以使用某些 JAXBElement 来代替球衣注释。

I wish to catch an XML (HashMap) of this format in my POST handler

<entries>
  <entry>
    <id>1</id>
    <labels>
      <label>label1</label>
      <label>label2</label>
      ...
    </labels>
  <entry>
  ...
<entries>

I wish my POST handler using Apache Jersey to look like this

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void createEntries(@MagicAnnotation HashMap<id, List<label>> entryMap){
    }

What is the closest I can get to this?

I am open to a better representation of a HashMap to XML. I just don't wish to parse xml manually and want to catch equivalent JSON as well.
I am not sure if some JAXBElement can be used instead of jersey annotation.

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

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

发布评论

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

评论(1

少年亿悲伤 2024-12-21 01:18:56

您不应该以这种方式访问​​ POST 正文。
您必须定义几个类才能让 Jersey 解析 XML 响应。

您的代码将如下所示:

@POST
public Response post(Entries entries) {
  Storage.put(entries);
  return Response.ok().build();
}

为了使这项工作有效,条目必须与 JAXB 兼容:

@XmlRootElement
public class Entries {
  @XmlElement List<Entry> entries;
}

@XmlType
public class Entry {
  @XmlAttribute String id;
  @XmlElement Labels labels;
}

@XmlType
public class Labels {
  @XmlElement List<String> label;
}

啊,Jersey 不是来自 Apache,而是来自 Sun。

Your are not supposed to access the POST body this way.
You have to define several classes to let Jersey parse the XML response.

Your code will look like:

@POST
public Response post(Entries entries) {
  Storage.put(entries);
  return Response.ok().build();
}

To make this work Entries have to be JAXB compatible:

@XmlRootElement
public class Entries {
  @XmlElement List<Entry> entries;
}

@XmlType
public class Entry {
  @XmlAttribute String id;
  @XmlElement Labels labels;
}

@XmlType
public class Labels {
  @XmlElement List<String> label;
}

Ah, and Jersey is not from Apache but from Sun.

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