2012-10-15 63 views
1

我目前正在編寫一個使用Restlet包及其Jackson擴展來使用REST式服務的Java客戶端。 我想查詢一個用戶的服務和反序列化到User POJO看起來如下回應:Jackson:序列化/反序列化字符串到單個項目的數組

@JsonIgnoreProperties(ignoreUnknown=true) 
public class User { 

    private Integer uid;  
    private String name; 
    private String mail; 
    private String field_nickname; 

    // omitted for brevity: getters/setters, toString 
} 

從服務示例響應如下所示:

{ 
    "uid": "5", 
    "name": "John Doe", 
    "mail": "[email protected]", 
    "field_nickname": { 
     "und": [{ 
      "value": "jdoe", 
      "format": null, 
      "safe_value": "jdoe" 
     }] 
    } 
} 

這裏是Java客戶端代碼:在uid

import org.restlet.resource.ClientResource; 
public class TestClient { 

    public static void main(String[] args) throws Exception { 
     // Getting a User 
     ClientResource cr = new ClientResource("http://localhost/rest/user/7.json") 
     User user = cr.get(User.class); 
     System.out.println(user); 

     // Creating a User 
     cr = new ClientResource("http://localhost/rest/user.json"); 
     User user = new User(); 
     user.setName("Jane Doe"); 
     user.setFieldNick("jdoe2"); 
     user.setMail("[email protected]"); 
     cr.post(user); 
    } 

序列化/反序列化,namemail字段非常簡單,並且沒有問題。 我的問題是與field_nickname:該字段始終包含數組und與單個條目總是看起來相同。

我該如何告訴Jackson將此字段反序列化爲String,其值爲field_nickname[und][0][value]並將該屬性序列化爲這樣的數組?

回答

0

這是一種一次性的結構轉換,您需要編寫自己的處理函數。最簡單的方法可能只是執行如下操作:

@JsonProperty("field_nickname") 
public void setNickname(NicknameWrapper[] wrapper) { 
    field_nickname = wrapper[0].value; 
} 

@JsonIgnoreProperties(ignoreUnknown=true) 
static class NicknameWrapper { 
    public String value; 
} 

也可能是反向(getNickname())。