杰克逊将特殊字符映射为null

时间:2015-11-03 12:22:21

标签: java jackson

如何配置Jackson json反序列化程序,使特殊字符说“##”,“#null”,“ - ”为null

例如:     说我的json是

{ "userId":"kp","fname":"k","lname":"p","mname":"##", rndNum:"-"}

Java类是

class User{
    private String userId;
    private String fname;
    private String lname;
    private String mname;
    private Integer rndNum;

    //getters/ and setters
}

我希望输出

user.getUserId() = kp
user.getMname() = null
user.getRndNum() = null

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用构造函数和验证器。 e.g。

public static String validate(String name) {
    if (name != null && !name.isEmpty() && (name.charAt(0) == '#' || name.charAt(0) == '-')) {
        return null;
    }
    return name;
}

class User {
    User(String userId, String fname, String lname, String mname) {
        this.userId = validate(userId);
        this.fname = validate(fname);
        this.lname = validate(lname);
        this.mname = validate(mname);
    }

我也认为这恰当地分离了功能。 Jackson代码和注释应该处理JSON中发生的任何事件的反序列​​化。您的类应该知道用于初始化的值是否有效,无论它们来自何处。

答案 1 :(得分:1)

根据您需要的高级解决方案,有两种方法可以执行此操作:

    如果您愿意逐个注册您的类型,
  • There是一种简单的方法。在此解决方案中,您将从原始Jackson对象提供反序列化代码到您想要的输出。

  • 或者您可以使用更强大的解决方案来覆盖默认的Serializer,方法是使用custom provider来覆盖所有类型。在这里,您将定义字符串应如何反序列化。