Est-il possible d'utiliser Jersey avec Moxy de/vers Json et Java 8 Optionals?Comment utiliser Java 8 Facultatif avec Moxy et Jersey
Comment le configurer?
Est-il possible d'utiliser Jersey avec Moxy de/vers Json et Java 8 Optionals?Comment utiliser Java 8 Facultatif avec Moxy et Jersey
Comment le configurer?
Vous pouvez déclarer la classe suivante:
public class OptionalAdapter<T> extends XmlAdapter<T, Optional<T>> {
@Override
public Optional<T> unmarshal(T value) throws Exception {
return Optional.ofNullable(value);
}
@Override
public T marshal(Optional<T> value) throws Exception {
return value.orElse(null);
}
}
Et utiliser comme ceci:
@XmlRootElement
public class SampleRequest {
@XmlElement(type = Integer.class)
@XmlJavaTypeAdapter(value = OptionalAdapter.class)
private Optional<Integer> id;
@XmlElement(type = String.class)
@XmlJavaTypeAdapter(value = OptionalAdapter.class)
private Optional<String> text;
/* ... */
}
Ou déclarer package-info.java
et retirer @XmlJavaTypeAdapter
de POJO:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlJavaTypeAdapters({
@XmlJavaTypeAdapter(type = Optional.class, value = OptionalAdapter.class)
})
Mais voici quelques-uns inconvénients:
@XmlElement(type = Integer.class)
pour indiquer le type de l'analyseur, sinon les valeurs null
seront transmises à la méthode unmarshal
de l'adaptateur.java.util.Date
en fonction d'une chaîne de format de date. Pour surmonter cela, vous devrez créer quelque chose comme adaptateur class OptionalDateAdapter<String> extends XmlAdapter<String, Optional<Date>>
.utilisant également Optional
sur le terrain n'est pas recommandé, voir this discussion pour plus de détails.
Compte tenu de tout ce qui précède, je suggère que l'utilisation Optional
comme type de retour pour vos POJO:
@XmlRootElement
public class SampleRequest {
@XmlElement
private Integer id;
public Optional<Integer> getId() {
return Optional.ofNullable(id);
}
public void setId(Integer id) {
this.id = id;
}
}
vous AFAIK besoin d'un adaptateur personnalisé pour gérer cela. –
Aucun pot d'insertion en tant que dépendance maven? Je suis sûr que je ne suis pas le premier à avoir ce problème. – kalamar
Je voudrais également demander comment écrire un XmlAdapter pour un optionnel qui est générique .... au cas où cela fait partie de la solution. – kalamar