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).