我目前正在编写一个使用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);
}
uid
,name
和mail
字段的序列化/反序列化非常简单,不会产生任何问题。
我的问题在于field_nickname
:该字段始终包含数组und
,其中一个条目始终看起来相同。
如何告诉Jackson将此字段反序列化为保存String
值的field_nickname[und][0][value]
并将该属性序列化为此类数组?
答案 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())。