用户类别:
@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