使用ObjectMapper将字符串转换为对象,但使用@JsonIgnore属性忽略字段



用户类别:

@Data
class User {
@JsonIgnore
private int id;
private String name;
}

我有这样的场景,我必须把用户对象写为字符串,但我不希望'id'字段包含在其中,我已经使用了@JsonIgnore属性我使用objectMapper将值写入String:

String s = mapper.writer().withDefaultPrettyPrinter().writeValueAsString(user);

按预期创建字符串值(不包括id字段)。

但在下一步,我需要从字符串s对象(但它不应该有id字段-但当我试图使用readValue,我得到id字段的对象默认值-这是我不想要的。)

User value = mapper.readValue(s, User.class);

下面是完整的代码:

@Data
class User {
@JsonIgnore
private int id;
private String name;
}
public class Test {
ObjectMapper objMapper;
public static void main(String[] args) throws IOException {
Test t = new Test();
t.meth();
}
public void meth() throws IOException {
ObjectMapper mapper = new ObjectMapper();
User user = new User();
user.setId(2);
user.setName("Bob");
System.out.println(user);
String s = mapper.writer().withDefaultPrettyPrinter().writeValueAsString(user);
User value = mapper.readValue(s, User.class);
System.out.println("==>String Value:n" + s);
System.out.println("===>Object Value:n" + value);
}
}

输出:

==>String Value:
{
"name" : "Bob"
}
===>Object Value:
User(id=0, name=Bob)

预期输出:

==>String Value:
{
"name" : "Bob"
}
===>Object Value:
User(name=Bob)

请参阅实际输出和预期输出中的对象值。

期待一个简单的解决方案。

提前感谢。

int不可能是null,因为它是原始数据类型。您可以使用Integer,因为它是一个对象,因此可以使用null

我认为你仍然需要告诉json它可以忽略json中没有@JsonIgnoreProperties(ignoreUnknown = true)

的字段

当你的目标是在打印用户时只获得没有id的输出时,你可以覆盖toString方法:

@Override
public String toString() {
return "User(name=" + name + ")";
}

或者因为你使用包含ToString注释的Data注释,你可以在你的id字段上添加@ToString.Exclude

最新更新