W tym elementy zerowe w wyjściu JSON API RESTful Jersey z JAXB
Mam klasę, którą chciałbym ujawnić poprzez API RESTful Jersey. Wygląda podobnie do tego:
<code>@XmlRootElement public class Data { public String firstName; public String lastName; } </code>
Moim problemem jest to, że pola te mogą mieć wartość NULL, w którym to przypadku pole jest pominięte na wyjściu JSON. Chciałbym, aby wszystkie pola były obecne niezależnie od ich wartości. Na przykład, jeśli lastName ma wartość NULL, wyjście JSON będzie:
<code>{ "firstName" : "Oleksi" } </code>
zamiast tego, co chcę:
<code>{ "firstName" : "Oleksi", "lastName" : null } </code>
Mam JAXBContextResolver (implementację ContextResolver), który wygląda tak:
<code>@Provider public class JAXBContextResolver implements ContextResolver<JAXBContext> { // internal state private final JAXBContext context; private final Set<Class> types; private final Class[] cTypes = { Data.class }; public JAXBContextResolver() throws Exception { types = new HashSet(Arrays.asList(cTypes)); context = new JSONJAXBContext(JSONConfiguration.natural().humanReadableFormatting(true).build(), cTypes); } @Override public JAXBContext getContext(Class<?> objectType) { return (types.contains(objectType)) ? context : null; } } </code>
Próbowałem wymyślić, jak uzyskać pożądany efekt przez jakiś czas, ale nie miałem szczęścia. Jestem otwarty na próbowanie innych ContextResolvers / Serializers, ale nie udało mi się znaleźć takiego, który działa, więc przykłady kodu byłyby miłe.