2012-10-15 61 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())。