java - Jackson - 将 JSON 字符串字段映射到只有一个字段(字符串)的类/pojo

标签 java json jackson

我正在编写一个 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/

相关文章:

java - 为什么 Java 应用程序需要应用程序服务器来托管?

java - 如何在 PGM 图像上使用 KMeans 实现 vector 量化

json - 将 Json 数组反序列化为 Scala 对象

java - 使用转换接口(interface)类型

java - 使用XSoup解析查询时出错

json - 合并 Firefox 书签

sql - 在 BigQuery 中展平 json 字符串

java - 在 JSON 中嵌套太深...我应该切换到 XML 吗?

java - @JsonPropertyOrder 不适用于 jackson-module-jsonSchema

java - 客户端发送的请求在语法上不正确 - JSON POST 正文中的类型复杂