property jsonignore fields java json jackson

java - jsonignore - json ignore property c#



Ignorar la propiedad al deserializar (3)

En el caso de que no posea o no pueda cambiar la clase agregando la anotación @JsonIgnore , obtendría el resultado esperado al usar mixin a partir de la versión 2.5 en su implementación.

public abstract class HasMoneyMixin { @JsonIgnore public abstract Money getMoney(); }

configurar mapper para utilizar mixin,

ObjectMapper mapper = new ObjectMapper(); mapper.addMixIn(HasMoney.class, HasMoneyMixin.class); // avoid failing if all properties are empty mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

Tengo una interfaz simple con getter y setter para una propiedad.

public interface HasMoney { Money getMoney(); void setMoney(Money money); }

Tengo otra clase UserAccount que implementa esta interfaz.

public class UserAccount implements HasMoney { private Money money; @Override Money getMoney() // fill in the blanks @Override void setMoney(Money money) // fill in the blanks }

Mi problema es que quiero serializar la propiedad de dinero pero ignorarla al deserializarla, es decir, no aceptar ningún valor del usuario para esta propiedad. He intentado @JsonIgnore en el configurador y @JsonIgnore (falso) en el getter, lo ignora pero lo hace mientras lo serializa también.

Intenté @JsonIgnore en el setter y @JsonProperty en el getter simplemente para decirle a Jackson que intentamos rastrear esta propiedad, que parece bloquear la aplicación cuando se envía la propiedad money al servidor y Jackson intenta deserializarla lanzando MalformedJsonException: no se puede construir objeto de tipo dinero.

Lo más extraño es que poner @JsonIgnore en el setter y @JsonProperty en el setter funciona en la mayoría de los casos cuando la propiedad es primitiva.



Ok, entonces el comportamiento de @JsonIgnore fue cambiado radicalmente desde 1.9 en adelante (para el peor imo). Sin entrar en los detalles diabólicos de por qué su propiedad no se ignora durante la deserialización, intente este código para solucionarlo:

public class UserAccount implements HasMoney { @JsonIgnore private BigDecimal money; // Other variable declarations, constructors @Override @JsonProperty public BigDecimal getMoney() { return money; } @JsonIgnore @Override public void setMoney(final BigDecimal money) { this.money = money; } // Other getters/setters }

Tenga en cuenta el uso de @JsonIgnore en el campo: es necesario para una solución de trabajo.

Nota: dependiendo de su entorno y caso de uso, es posible que necesite una configuración adicional en su instancia de ObjectMapper, por ejemplo, USE_GETTERS_AS_SETTERS, AUTO_DETECT_GETTERS, AUTO_DETECT_SETTERS, etc.