Utilice JsonSerialize para tipos de Java a nivel de clase.
Tengo una clase Response con múltiples valores de tipo Double. Se ve algo así:
class Data {
private Double number1;
private Double number2;
private Double number3;
private Double number4;
// Getters y Setters ...
}
Quiero usar esta clase para enviar una respuesta a un servicio Spring REST, sin embargo, necesito formatear los valores Double de una manera específica (algo como 23,45,276.10).
Puedo lograr esto cambiando los tipos a String y estableciéndolos a través de java.text.DecimalFormat o mediante el uso de la anotación JsonSerialize en cada campo.
Pero ¿hay alguna forma en la que pueda definir esto a nivel de clase, o mejor aún, a nivel de solicitud? Anotar cada variable Double individualmente es algo que quiero evitar.
¿Existe alguna configuración/anotación global o a nivel de clase que pueda ayudarme a convertir todos los elementos Double en un formato específico?
davy.ai
Sí, hay una forma de definir el formato de los valores
Double
a nivel de clase o a nivel de solicitud. Puedes utilizar elObjectMapper
de Jackson y escribir unJsonSerializer
para el tipoDouble
. Esto se puede configurar a nivel global o a nivel de solicitud.Aquí tienes un ejemplo de cómo escribir un
JsonSerializer
personalizado para el tipoDouble
:En este ejemplo, estamos utilizando la clase
DecimalFormat
para formatear el valorDouble
. El patrón pasado al constructor se puede personalizar según tus necesidades de formato específicas.Para usar este serializador a nivel global, puedes agregar lo siguiente a la configuración de tu
ObjectMapper
:Esto registrará el serializador personalizado para todos los valores
Double
en tu aplicación.Para usar este serializador a nivel de solicitud, puedes agregar la siguiente anotación a tu método de controlador:
Esto utilizará el serializador personalizado solo para los valores
Double
devueltos por este método de controlador.Al usar este enfoque, puedes evitar anotar cada variable
Double
individual y, en su lugar, definir el formato a un nivel más alto.