Использование свойств десериализации определенных свойств JsonIgnoreProperties существует только в JSON. - PullRequest
0 голосов
/ 20 ноября 2018

Я наткнулся на некоторый код, который добавляет JsonIgnoreProperties к свойству, которое не существует в классе, но существует в JSON, например:

@JsonIgnoreProperties({"ignoreprop"})
public class VO {
   public String prop;
}

Когда JSON

{ "prop":"1", "ignoreprop":"9999"}

Интересно, имеет ли игнорирование свойств какое-либо преимущество (преимущества) в производительности или это просто избыточный код?

Аннотация, которая может использоваться для подавления сериализациисвойств (во время сериализации) или игнорировать обработку прочитанных свойств JSON (во время десериализации).

РЕДАКТИРОВАТЬ

Существуют ли преимущества при игнорировании определенного свойстваза все (с @JsonIgnoreProperties(ignoreUnknown=true))?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Интересно, имеет ли преимущество игнорирование свойств

Да, он часто используется для прямой совместимости в сервисах.Допустим, у вас есть службы A и B. В настоящее время A отправляет запросы в B с некоторыми объектами JSON.
Теперь вы хотите поддерживать новое свойство в JSON.Если у вас есть эта функция, вы можете позволить A начать отправку нового свойства, прежде чем B узнает, как с ним обращаться. Разъединение процессов разработки этих двух сервисов.

игнорирование специфического свойства над всеми

В этом случае есть некоторые незначительныепреимущества производительности.Во-первых, он не пытается проанализировать это свойство, которое может быть простой строкой или сложным объектом / массивом.Во-вторых, это поможет вам избежать обработки исключений.Подумайте, что все перечисленные ниже могут быть действительными звонками, и вы заботитесь только о prop:

{ "prop":"1", "ignoreprop":"9999"}

{ "prop":"1", "ignoreprop":{ "a": { "key": "value", "foo": false }}}

{ "prop":"1", "ignoreprop":[1,2,3,4,5,6..... 1000000]}
0 голосов
/ 20 ноября 2018

Исходя из документации, в основном целью использования является Чтобы игнорировать любые неизвестные свойства во входных данных JSON без исключения: , что лучше не вызывать исключения, когда свойства не найдены ни в классе, ни в JSON, иэто может помочь сериализации быстрее документы

Пример:

// для предотвращения сериализации или десериализации указанных полей

// (т.е.не включать в вывод JSON или быть установленным, даже если они были включены) @JsonIgnoreProperties ({"internalId", "secretKey"})

// Чтобы игнорировать любые неизвестные свойства во входных данных JSON без исключения: @JsonIgnoreProperties (ignoreUnknown = true)

Начиная с версии 2.0, эта аннотация может применяться как к классам, так и к свойствам.Если используется для обоих, фактический набор будет объединением всех невежествов: то есть вы можете добавлять только свойства игнорировать, но не удалять или переопределять.Таким образом, вы не можете удалить свойства, чтобы игнорировать их, используя аннотацию для каждого свойства.

...