java - validacion - ¿Por qué las restricciones mín./Máx. De validación de bean no admiten el tipo doble?
validar input javascript (1)
Es por redondeo. Pero no por el problema de que un doble no se corrija lo suficiente como para expresar el número que desea. Es más que el valor de anotación (de Min
y Max
) es de tipo largo, por lo que no puede expresar ningún número con posiciones decimales. Por otro lado, no puede usar un doble para expresar todos los números exactos que un largo puede expresar.
Así que los diseñadores de API tuvieron que decidir por una de las dos formas (larga o doble)
¿Podría alguien explicarme por qué la JPA admite el tipo double
como tipo de campo, pero la validación del bean se restringe en javax.validation.constraints
(es decir, @Min / @Max ) no lo admite? Sé que la documentación dice que esto se debe a errores de redondeo, pero si elijo el tipo de campo para ser double
, ya admito que no me importa mucho la precisión explícita.
El escenario que encontré en este dilema es el siguiente: Tengo una Entidad que representa un punto en la superficie de la tierra. Si la precisión está dentro de unos pocos centímetros, está bien. Se ve algo como esto:
@Entity
public class Point {
/**
* The longitude in radians.
*/
@Min(-Math.Pi)
@Max(Math.Pi)
double longitude;
/**
* The latitude in radians.
*/
@Min(-Math.Pi / 2)
@Max(Math.Pi / 2)
double latitude;
}
Desafortunadamente esto no funciona, porque las anotaciones no son compatibles con el tipo doble. Pero usar BigDecimal
lugar de BigDecimal
no es realmente una opción, porque tengo algunos cálculos extensos con múltiples puntos en curso que aún deben ser razonablemente rápidos. Lo resolví definiendo un control de restricción personalizado que funciona con el double
s, pero de alguna manera creo que hay algo que me falta en toda la historia. Entonces, ¿qué me estoy perdiendo?