2010-05-27 22 views
19

Ho due servlet: il primo servlet è simile a un client e crea un HttpURLConnection per chiamare il secondo servlet.Invia messaggio di errore come oggetto JSON

Vorrei inviare un errore di speciale, formattato come un oggetto JSON, quindi chiamare il metodo sendError in questo modo:

response.sendError(code, "{json-object}") 

Ma nel primo servlet quando ho letto l'errore con getResponseMessage metodo ottengo solo di serie Messaggio HTTP e non il mio oggetto JSON come stringa.

Come posso ottenere la mia stringa JSON?

risposta

38

Dalle HttpServletResponse#sendError() javadoc:

default il server per creare la risposta ad assomigliare ad una pagina di errore del server in formato HTML contenente il messaggio specificato, impostare il tipo di contenuto a "text/html", lasciando i cookie e altre intestazioni non modificate. Se è stata effettuata una dichiarazione della pagina di errore per l'applicazione Web corrispondente al codice di stato inoltrato, verrà restituita in base al parametro msg suggerito.

Quindi con questo approccio non avete altra scelta che estrarre il messaggio dalla risposta HTML da soli. JSoup potrebbe tuttavia essere useful in questo.

Per ottenere ciò che si desidera, è necessario impostare il codice di errore e scrivere la risposta da soli, ad es.

response.setStatus(code); 
response.setContentType("application/json"); 
response.setCharacterEncoding("UTF-8"); 
response.getWriter().write(json); 

Invece di code si potrebbe tra l'altro utilizzare anche uno dei HttpServletResponse.SC_XXX constants per questo.

+0

Grazie mille. Avevo un dubbio su questo e ho postato la domanda, il tuo suggerimento è solo un modo per ottenere json string senza trovarlo in codice html. – pAkY88

+0

Prego. Vedo che sei nuovo qui. Non dimenticare di contrassegnare la risposta accettata. Vedi anche [questo link] (http://stackoverflow.com/faq) come funziona StackOverflow :) – BalusC