Jackson:使用单个条目序列化/反序列化字符串到数组

时间:2012-10-15 09:01:59

标签: java rest jackson restlet

我目前正在编写一个使用Restlet软件包及其Jackson扩展程序来使用RESTful服务的Java客户端。 我想查询用户的服务,并将对User POJO的响应反序列化,如下所示:

@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": "john@example.com",
    "field_nickname": {
        "und": [{
            "value": "jdoe",
            "format": null,
            "safe_value": "jdoe"
        }]
    }
}

这是Java客户端代码:

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("jdoe2@example.com");
        cr.post(user);
    }

uidnamemail字段的序列化/反序列化非常简单,不会产生任何问题。 我的问题在于field_nickname:该字段始终包含数组und,其中一个条目始终看起来相同。

如何告诉Jackson将此字段反序列化为保存String值的field_nickname[und][0][value]并将该属性序列化为此类数组?

1 个答案:

答案 0 :(得分:0)

这是一种一次性的结构转换,您需要编写自己的处理程序。最简单的方法可能就是实现类似的东西:

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

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

也许可以反转(getNickname())。