如何配置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
答案 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来覆盖所有类型。在这里,您将定义字符串应如何反序列化。