Saltar al contenido

Serialización de Java a Jackson JSON: campos de dinero

Te damos la solución a esta preocupación, al menos eso creemos. Si sigues con preguntas puedes dejar un comentario y sin dudarlo te ayudaremos

Solución:

Puede usar un serializador personalizado en su campo de dinero. Aquí hay un ejemplo con un MoneyBean. El campo Monto se anota con @JsonSerialize(usando=…).

public class MoneyBean 
    //...

    @JsonProperty("amountOfMoney")
    @JsonSerialize(using = MoneySerializer.class)
    private BigDecimal amount;

    //getters/setters...


public class MoneySerializer extends JsonSerializer 
    @Override
    public void serialize(BigDecimal value, JsonGenerator jgen, SerializerProvider provider) throws IOException,
            JsonProcessingException 
        // put your desired money style here
        jgen.writeString(value.setScale(2, BigDecimal.ROUND_HALF_UP).toString());
    

Eso es todo. Un BigDecimal ahora se imprime de la manera correcta. Usé un caso de prueba simple para mostrarlo:

@Test
public void jsonSerializationTest() throws Exception 
     MoneyBean m = new MoneyBean();
     m.setAmount(new BigDecimal("20.3"));

     ObjectMapper mapper = new ObjectMapper();
     assertEquals(""amountOfMoney":"20.30"", mapper.writeValueAsString(m));

Puedes usar @JsonFormat anotación con shape como STRING en tu BigDecimal variables Consulte a continuación:

 import com.fasterxml.jackson.annotation.JsonFormat;

  class YourObjectClass 

      @JsonFormat(shape=JsonFormat.Shape.STRING)
      private BigDecimal yourVariable;

 

En lugar de configurar @JsonSerialize en cada miembro o captador, puede configurar un módulo que use un serializador personalizado para un tipo determinado:

SimpleModule module = new SimpleModule();
module.addSerializer(BigInteger.class, new ToStringSerializer());
objectMapper.registerModule(module);

En el ejemplo anterior, usé el para string serializer para serializar BigIntegers (ya que javascript no puede manejar tales valores numéricos).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *