это простой код, который я использую для создания JSON, но я хочу, чтобы он игнорировал некоторые поля именно здесь. поэтому я не хочу использовать аннотацию @JsonIgnore. но проблема в том, что без атрибута не работает, и все поля остаются в строке JSON. и у меня есть еще вопрос. как я могу отформатировать значение некоторых полей с помощью objectMapper. например, отформатируйте значение поля имени пользователя до ** 8t при изменении на JSON без каких-либо аннотаций.
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>
обновление: я использовал ExclusionStrategy библиотеки GSON, и это сработало. но когда я использую его на сервере, у меня увеличивается объем проводной кучи и только из-за приведенной ниже 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 потребляет большой объем кучи.
ObjectWriter ow = new ObjectMapper().writer().withoutAttribute("username").withoutAttribute("password");
- person Deadpool   schedule 27.07.2019