Метод ObjectWriter без атрибута не работает

это простой код, который я использую для создания 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 потребляет большой объем кучи.


person Mina Kh    schedule 27.07.2019    source источник
comment
так вы хотите игнорировать цифры?   -  person Deadpool    schedule 27.07.2019
comment
нет никакой строки. я случайно поставил цифры   -  person Mina Kh    schedule 27.07.2019
comment
попробуй это ObjectWriter ow = new ObjectMapper().writer().withoutAttribute("username").withoutAttribute("password");   -  person Deadpool    schedule 27.07.2019
comment
пробовал. не работает. благодарю вас   -  person Mina Kh    schedule 27.07.2019
comment
Вы можете написать собственный сериализатор, и он должен помочь вам указать, какие поля сериализовать, и позволить форматировать значения, если это необходимо. Также взгляните на Как исключить поля с Джексоном не использовать аннотации?, Игнорировать сериализацию поля на основе другого поля значение,   -  person Michał Ziober    schedule 27.07.2019
comment
Спасибо за вашу помощь. но моя первоначальная проблема в том, что я не знаю других полей своего объекта, и я просто хочу удалить поля с определенными именами, такими как имя пользователя и пароль (превращая тип объекта в JSON). поэтому единственным способом может быть исключение его по имени.   -  person Mina Kh    schedule 28.07.2019