Estoy intentando deserializar un objeto JSON almacenado en CouchDb utilizando Jackson. Este objeto necesita deserializarse en un pojo que contenga métodos sobrecargados. Cuando intento para recuperar el objeto del sofá y hacer la deserialización consigo la siguiente excepción:Deserialización de JSON en objetos con métodos sobrecargados con Jackson
org.ektorp.DbAccessException: org.codehaus.jackson.map.JsonMappingException: en conflicto definiciones setter para propiedad " multiplicador ": com.db.commodities.framework.sdos.model.security.EqOpt # setMultiplier (1 params) vs com.db.commodities.framework.sdos.model.security.EqOpt # setMultiplier (1 params)
Traté de una nnote el setter que me gustaría que Jackson use, pero parece que no funcionó.
@JsonProperty("multiplier")
public void setMultiplier(SDOSAttribute multiplier) {
this.multiplier = multiplier;
}
public void setMultiplier(double multiplier) {
this.multiplier.setValue(String.valueOf(multiplier));
}
¿Cómo configuro Jackson para deserializar correctamente utilizando un método específico? ¿O me estoy acercando a este problema de la manera incorrecta?
EDIT:
he realizado los siguientes cambios. Esto parece funcionar, pero es un poco más feo. Si alguien tiene una mejor manera de hacerlo, siéntete libre de compartir y con mucho gusto lo aceptaré.
@JsonProperty("multiplier")
protected void setMultiplierAttribute(SDOSAttribute multiplier) {
this.multiplier = multiplier;
}
@JsonIgnore
public void setMultiplier(double multiplier) {
this.multiplier.setValue(String.valueOf(multiplier));
}
Sí, esto es punto válido. Estoy de acuerdo en que sería bueno si se utilizara la inferencia de manera que si solo se indicara explícitamente una alternativa, se podrían ignorar otros en caso de ambigüedad de sobrecarga. Puedo agregar una solicitud de función Jira para esto. – StaxMan
Otra cosa: es interesante que haya un problema de sobrecarga aquí, ya que Jackson realmente permite una sobrecarga limitada. Específicamente, si el argumento fuera int o long (en lugar de double), el problema no ocurriría.Pero otros tipos primitivos (doble, flotante, booleano, char, byte, corto) no son compatibles de esta manera; aunque flotante y doble probablemente debería ser. Con la diferencia larga e interna se resuelve según lo que tiene JSON: los objetos JSON usan el setter POJO; Números JSON int o largos. – StaxMan