Как использовать @JacksonInject (useInput = OptBoolean.FALSE) - PullRequest
0 голосов
/ 30 апреля 2019

Об useInput, я читал из какой-то статьи

"useInput: это логическое значение и определяет, будет ли использоваться соответствующее входное значение для аннотированного свойства или нет. Если значение равно false, входное значение будет игнорироваться. Если значение равно true, входное значение будет переопределять введенное значение. Значение по умолчанию Значение по умолчанию для useInput имеет истинное значение. "

Мой вопрос:

Что означают «входное значение» и «значение впрыска»?

Рассмотрим код ниже:

public class Writer {
    private Integer id;
    @JacksonInject(useInput = OptBoolean.TRUE)
    private String name;

    public static void main(String[] args) throws IOException {
        String jsonData = "{\"id\":111,\"name\":\"Ju\"}";
        ObjectMapper mapper = new ObjectMapper();
        InjectableValues.Std injectableValues = new InjectableValues.Std();
        injectableValues.addValue(String.class, "Default Value");
        mapper.setInjectableValues(injectableValues);
        Writer writer = mapper.readValue(jsonData, Writer.class);
        System.out.println(writer);
    }
 ....get set....
}

После десериализации значение свойства «name» всегда равно «Ju», независимо от того, является ли OptBoolean ИСТИНА или ЛОЖЬ, так что означает «OptBoolean»? И как им пользоваться?

1 Ответ

0 голосов
/ 30 апреля 2019

Когда Джексон вводит значение в свойство, он может определить значение для ввода на основе двух факторов:

  1. тип имущества
  2. идентификатор произвольной строки

таким образом, вы можете решить, что все свойства String будут добавлены с "Default Value", а одно конкретное свойство String будет добавлено с "Specific Value". для этого вы указываете String id в качестве значения аннотации и используете injectableValues.addValue(), который получает String в качестве 1-го аргумента (не Class)

Аргумент UseInput предназначен для случаев, когда, хотя вы указываете значение аннотации, вы можете решить, будет ли оно использоваться или проигнорировано (возвращаясь к внедрению на основе типов), это полезно, если у вас нет доступа к исходный код (например, в сторонней библиотеке), а затем вы можете использовать функцию mixin Джексона, чтобы переопределить аннотацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...