Abbiamo un intero set di servizi REST JAX-RS in esecuzione su Apache CXF e Jackson. Usiamo le annotazioni JAXB per occuparci dei POJO di marshalling su JSON, funziona alla grande.Come passare raw JSON tramite Jackson?
Tuttavia, abbiamo uno o due punti in cui vogliamo restituire una stringa JSON non elaborata (che recuperiamo da una cache Redis).
Jackson avvolge sempre la stringa tra virgolette e sfugge a tutte le doppie virgolette, ad es.
@GET @Produces("application/json")
public Response getData() {
String json = ...get from Redis...
return Response.ok(json,"application/json").build()
}
ci dà
"{\"test\":1}"
invece di
{"test":1}
Ho provato diverse cose, aggiungendo RawSerializer (String.class) per il mapper oggetto, non funziona nulla. L'unica cosa che funziona è se ho impostato il tipo di supporto a stringa pianura che bypassato Jackson, ma non è buona, dal momento che sto tornando il contenuto tipo sbagliato
cioè
return Response.ok(json,"text/plain").build()
opere, ma scarsamente (tipo di contenuto errato, che rovina le app .Net WCF che ci chiamano)
Ho dovuto usare invece una mappa e lasciare a Jersey l'analisi corretta ... Ho aggiunto JacksonJsonProvider con mapper.setVisibility (PropertyAccessor.FIELD, Visibility.ANY); –