17.7. JAXB オブジェクトのマップ


ESTEasy は JAXB オブジェクトのマップを XML、 JSON、 Fastinfoset、 その他の RESTEasy JAXB マッパ間で自動的にマーシャリングします。 パラメータやメソッドの戻りタイプは、 ストリングをキーや JAXB オブジェクトとしたジェネリックタイプでなければなりません。
@XmlRootElement(namespace = "http://foo.com")
public static class Foo
{
   @XmlAttribute
   private String name;

   public Foo()
   {
   }

   public Foo(String name)
   {
      this.name = name;
   }

   public String getName()
   {
      return name;
   }
}

@Path("/map")
public static class MyResource
{
   @POST
   @Produces("application/xml")
   @Consumes("application/xml")
   public Map<String, Foo> post(Map<String, Foo> map)
   {
      Assert.assertEquals(2, map.size());
      Assert.assertNotNull(map.get("bill"));
      Assert.assertNotNull(map.get("monica"));
      Assert.assertEquals(map.get("bill").getName(), "bill");
      Assert.assertEquals(map.get("monica").getName(), "monica");
      return map;
   }
 }
Copy to Clipboard Toggle word wrap
このリソースは、 マップ内で JAXB オブジェクトを公開し、 受け取ります。 デフォルトでは、 デフォルトの名前空間内の map エレメントにラッピングされます。 各 map エレメントはゼロ以上の entry エレメントと 1 つの key 属性を持っています。
 <map>
<entry key="bill" xmlns="http://foo.com">
    <foo name="bill"/>
</entry>
<entry key="monica" xmlns="http://foo.com">
    <foo name="monica"/>
</entry>
 </map>
Copy to Clipboard Toggle word wrap
パラメータかメソッド上で @org.jboss.resteasy.annotations.providers.jaxb.WrappedMap アノテーションを使用すると、 名前空間 URL、 名前空間プレフィックスとマップ、 エントリ、 キーエレメント、 属性名を変更することができます。
 @Target({ElementType.PARAMETER, ElementType.METHOD})
 @Retention(RetentionPolicy.RUNTIME)
 public @interface WrappedMap
 {
/**
 * map element name
 */
String map() default "map";

/**
 * entry element name *
 */
String entry() default "entry";

/**
 * entry's key attribute name
 */
String key() default "key";

String namespace() default "";

String prefix() default "";
 }
Copy to Clipboard Toggle word wrap
次の XML を出力したいとします。
 <hashmap>
<hashentry hashkey="bill" xmlns:foo="http://foo.com">
    <foo:foo name="bill"/>
</hashentry>
 </map>
Copy to Clipboard Toggle word wrap
この場合、次のように @WrappedMap アノテーションを使用します。
@Path("/map")
public static class MyResource
{
   @GET
   @Produces("application/xml")
   @WrappedMap(map="hashmap", entry="hashentry", key="hashkey")
   public Map<String, Foo> get()
   {
      ...
      return map;
   }
Copy to Clipboard Toggle word wrap

17.7.1. JSON および JAXB マップ

RESTEasy は JSON とのマップの使用をサポートします。 簡単な JSON マップ内の返された JAXB オブジェクトが含まれます。 次の例を見てみましょう。
   @XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public static class Foo
{
   @XmlAttribute
   private String test;

   public Foo()
   {
   }

   public Foo(String test)
   {
      this.test = test;
   }

   public String getTest()
   {
      return test;
   }

   public void setTest(String test)
   {
      this.test = test;
   }
}
Copy to Clipboard Toggle word wrap
次のように Foo クラスのリストやアレイが JSON で示されます。
 { "entry1" : {"foo":{"@test":"bill"}}, "entry2" : {"foo":{"@test":"monica}"}}}
Copy to Clipboard Toggle word wrap
出力にもこの形式が必要です。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat