【问题标题】:Jackson: Serializing/Deserializing String to Array with single entryJackson:使用单个条目将字符串序列化/反序列化为数组
【发布时间】:2012-10-15 09:01:58
【问题描述】:

我目前正在编写一个使用 RESTful 服务的 Java 客户端,使用的是 Restlet 包及其 Jackson 扩展。 我想查询用户的服务并将响应反序列化为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] 的值并将属性序列化为这样的数组?

【问题讨论】:

    标签: java rest jackson restlet


    【解决方案1】:

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

    @JsonProperty("field_nickname")
    public void setNickname(NicknameWrapper[] wrapper) {
       field_nickname = wrapper[0].value;
    }
    
    @JsonIgnoreProperties(ignoreUnknown=true)
    static class NicknameWrapper {
       public String value;
    }
    

    也许还有反向 (getNickname())。

    【讨论】:

      猜你喜欢
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 2019-08-21
      • 2021-01-01
      • 2018-03-17
      • 1970-01-01
      相关资源
      最近更新 更多