Pregunta

Tengo el siguiente JSON, donde puede ser verdadera o falsa:

{"flag1":<boolean value>, "flag2":<boolean value>}

Y he tratado de unirse a una clase Java utilizando Jersey y las siguientes anotaciones JAXB:

@XmlRootElement
public class MyClass {
    @XmlElement(name = "flag1", type = Boolean.class)
    private Boolean flag1;
    @XmlElement(name = "flag2", type = Boolean.class)
    private Boolean flag2;

    ...
}

El problema es que cuando asigno un valor no booleano para 'flag1' o 'flag2', como en el ejemplo siguiente, JAXB asigna automáticamente un valor falso a la 'flag1' y los campos de los Flag2 'de MyClass.

{"flag1":"foo", "flag2":"bar"}

¿Hay una manera de anotar 'MiClase' para que cuando 'flag1' de JSON y 'flag2' no son boolean consigo una excepción?

¿Fue útil?

Solución

Parece que Jersey es simplemente usando Boolean.valueOf , que trata a todo lo que no sea un literal "verdadero" como falso. Desde JavaScript no tiene una noción de tipo de variable, este es un comportamiento posiblemente válida.

Un mapeo XML, en cambio, se basa en una definición de esquema, que tiene una idea muy específica de valores booleanos.


No haber utilizado Jersey (o JAXB desde los días 1.x), me pregunto si tiene que anotar las variables reales, o si se puede anotar los definidores. O tal vez usted podría proporcionar un regulador que toma un String y lo analiza, en lugar de / junto con un regulador que toma un boolean.

Otros consejos

Lo que mostró que funcionaría de la manera deseada (una excepción) si se ha utilizado proveedor de JAX-RS pura Jackson. Lo hace aceptar algunas variaciones (1 y 0, ya que algunos lenguajes no tienen tipo booleano nativo), pero no cosas que no tienen equivalente significativa.

Como alternativa, como se sugiere, un método de selección de tipo String tendría sentido, ya que entonces se podría controlar manualmente las conversiones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top