我正在编写一个 JSON 接口(interface)/库来使用 Bugzilla 的网络服务。
这可能使用注释或其他东西吗?还是我要为每个这样的实例编写自定义解串器?
我已经尝试做一些研究,并找到了一些关于值实例化器或使用构造函数的信息,但使用构造函数不是反 Bean 吗?我发现新功能的文档很少或难以理解。
例子:
public class Bug{
// Bug info, strings, ints, yadda yadda.
private User creator; // creator of the bug, json is like {"creator":"blahblah@email.com"}
}
public class User{
private String username;
}
//insert setter/getter.
我为 One 字段使用 pojo 的原因是因为这个 User 类由另一个具有更多字段的类扩展。虽然我可以实现构造函数来实现此效果,但这样做意味着我必须为所有其他子类实现相同的构造函数。我觉得有一些类似于 @JsonValue 的东西但是用于设置(我在我的 setter 上尝试了 JsonCreator 但仍然遇到了与我在下面得到的相同的错误)。
“无法从字符串值实例化类型 [简单类型,类 User] 的值;没有单字符串构造函数/工厂方法”
谢谢。
最佳答案
使用@JsonCreator 进行反序列化,使用@JsonValue 进行序列化。已经测试了代码。请确保 getJsonString() 是公共(public)方法。
例如:
public class User{
private String username;
@JsonValue
public String getJsonString() {
return username;
}
@JsonCreator
private static User parseJson(String jsonStr) {
User u = new User();
u.username = jsonStr;
return u;
}
public static void main(String[] args) {
User u = new User();
u.userName = "Niraj";
ObjectMapper m = new ObjectMapper();
String jsonString = m.writeValueAsString(u);
User u1 = m.readValue(jsonString, User.class);
}
}
关于java - Jackson - 将 JSON 字符串字段映射到只有一个字段(字符串)的类/pojo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16061587/