2012-04-20 124 views
5

我的寧靜JSON服務的下一個問題。Marshal a java.util.Map <String,String>

import java.util.Map; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlRootElement; 

/** 
* @author Martin Burchard 
* 
*/ 
@XmlRootElement(name = "user") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class User { 
    private String id; 
    private String nickname; 
    private String email; 
    private String password; 
    private Map<String, String> user_attributes; 

} 

目前該服務提供了以下JSON(縮進了更好的閱讀):

{ 
    "user" : { 
     "id" : "9bdf40ea-6d25-4bc3-94ad-4a3d38d2c3ca", 
     "email" : "[email protected]", 
     "password" : "xXpd9Pl-1pFBFuX9E0hAYGSDTyJQPYkOtXGvRCrEtMM", 
     "user_attributes" : { 
      "entry" : [{ 
        "key" : "num", 
        "value" : 123 
       }, { 
        "key" : "type", 
        "value" : "nix" 
       } 
      ] 
     } 
    } 
} 

有趣認爲,內部的NUM 123是一個java.lang.String ...

我不明白這是怎麼解釋http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-DealingwithJSONarrayserializationissues

我喜歡這個JSON:

{ 
    "user" : { 
     "id" : "9bdf40ea-6d25-4bc3-94ad-4a3d38d2c3ca", 
     "email" : "[email protected]", 
     "password" : "xXpd9Pl-1pFBFuX9E0hAYGSDTyJQPYkOtXGvRCrEtMM", 
     "user_attributes" : { 
      "num" : "123", 
      "type" : "nix" 
     } 
    } 
} 

我將JSON提供者更改爲Jackson。 現在我的JSON看起來像我喜歡它...

+0

你確定你需要一張地圖嗎?你不能有一個叫做用戶屬性的對象,並有一個用戶屬性列表? – 2012-04-20 16:12:01

+0

我的附加屬性總是包含一個名稱和一個值,因爲它們存儲在數據庫中,它們總是字符串。我認爲一個簡單的Map 就足夠了。我應該用名稱和值來使用List和Attribute Object嗎? – Nabor 2012-04-20 16:15:39

回答

1

是在我腦海中是使用JAXB XmlAdapter的唯一的事情。你可以定義一個給定的對象(在你的情況下,Map)將如何映射到JSON字符串。

相關問題