使用者类别:
@Data
class User {
@JsonIgnore
private int id;
private String name;
}
我有这样一个场景,我必须将用户对象写为字符串,但我不希望在其中包含'id'字段,为此我使用了@JsonIgnore属性。我使用objectMapper将值写为字符串:
String s = mapper.writer().withDefaultPrettyPrinter().writeValueAsString(user);
这将按预期创建字符串值(不包括ID字段)。
但在下一步,我需要String 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)
请查看实际和预期输出中的对象值。
期待一个简单的解决方案。
先谢谢你。
1条答案
按热度按时间jgovgodb1#
int
不能是null
,因为它是基本数据类型。您可以使用Integer
,因为它是对象,因此可以是null
。我认为您仍然需要告诉json,它可以忽略那些不在json中的字段,并使用
@JsonIgnoreProperties(ignoreUnknown = true)
如果您的目标是在打印用户时只获取不带id的输出,则可以覆盖
toString
方法:或者,由于您使用了包含
ToString
注解的Data
注解,因此可以在id字段上添加@ToString.Exclude