这是一个用于创建JSON的简单代码,但我希望它忽略此处的某些字段。所以我不想使用@JsonIgnore注释。但是问题是没有属性不起作用,所有字段都保留在JSON字符串中。 我还有另一个问题。我如何使用objectMapper格式化某些字段的值。例如,在更改为JSON且没有任何注释时,将username字段的值格式设置为** 8t。
TestObject testObject = new TestObject("858t","444hg", "mina");
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter().withoutAttribute("username").withoutAttribute("password");
String s = ow.writeValueAsString(testObject);
System.out.println(s);
我希望输出
{"name":"mina"}
但我的成绩低于预期
{
"username" : "858t",
"password" : "444hg",
"name" : "mina"
}
这是我正在使用的Maven依赖项。我还尝试了其他版本,例如2.8.7
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
更新:我使用了GSON库的ExclusionStrategy,并且可以正常工作。但是当我在服务器中使用它时,由于堆栈记录器中使用了下面的ExclusionStrategy,我的有线堆空间有了增长:
public class SecurityJsonExclusion implements ExclusionStrategy {
private Class<?> c;
ArrayList<String> fieldNames = new ArrayList<String>(Arrays.asList("username","password"));
public SecurityJsonExclusion(String... fieldNames) throws SecurityException {
if (fieldNames != null) {
Collections.addAll(this.fieldNames, fieldNames);
}
}
public SecurityJsonExclusion() {
}
public boolean shouldSkipClass(Class<?> arg0) {
return false;
}
public boolean shouldSkipField(FieldAttributes f) {
if (fieldNames == null || fieldNames.size() == 0) {
return false;
} else {
String name = f.getName();
for (String s : fieldNames) {
if (name.equalsIgnoreCase(s)) {
return true;
}
}
return false;
}
}
}
像这样使用它:
Gson gson = new GsonBuilder()
.setExclusionStrategies(new SecurityJsonExclusion()).setPrettyPrinting()
.create();
return gson.toJson(o);
即使删除setExclusion部分,gsonBuilder本身也会消耗大量堆空间。