Como se muestra en la imagen:
Método de procesamiento:
basado en JsonSerializer de springboot, personalizamos el procesamiento de JsonSerializer para propiedades de tipo BigDecimal.
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Objects;
/**
* @Description
* @auther JCccc
* @date 2023-03-11
*/
public class MyBigDecimalSerialize extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if(Objects.nonNull(value)) {
gen.writeString( value.stripTrailingZeros().toPlainString());
}else {
//为null的处理,就返回null ,或者可以自己处理
gen.writeNull();
}
}
}
¿De qué trata esto?
Puedes ver una simple línea de código:
value.stripTrailingZeros().toPlainString()
¿Qué hizo esto?
tira de ceros finales ()
Elimine todos los 0 finales y devuelva un tipo de datos BigDecimal, que no se puede garantizar que sea notación científica.
aPlainString()
Convierta los datos de tipo BigDecimal en datos de tipo String y asegúrese de que no sea una notación científica.
Entonces, ¿cómo usarlo? Es muy simple, solo use la anotación @JsonSerialize en las propiedades que deben procesarse en la clase de entidad devuelta de nuestra interfaz.
Ejemplo:
@JsonSerialize(using= MyBigDecimalSerialize.class)
private BigDecimal p1Amt;
@JsonSerialize(using= MyBigDecimalSerialize.class)
private BigDecimal t1Amt;
@JsonSerialize(using= MyBigDecimalSerialize.class)
private BigDecimal c1Amt;
De hecho, podemos manejar muchas cosas basándonos en esto, por ejemplo, cuando el valor devuelto es 0, quiero devolver 0.00;
Al devolver 0.0, también quiero devolver 0.00, que se puede manejar con esto:
Es decir, puedo usar este JsonSerializer personalizado para reproducir mi propio procesamiento comercial único.