Returnerer et JSON-svar fra en Servlet
1. Introduksjon
I denne raske opplæringen oppretter vi en liten webapplikasjon og utforsker hvordan du returnerer et JSON-svar fra en Servlet.
2. Maven
For vår webapplikasjon inkluderer vi javax.servlet-api og Gson avhengigheter i vår pom.xml:
javax.servlet javax.servlet-api $ {javax.servlet.version} com.google.code.gson gson $ {gson.version}
De siste versjonene av avhengighetene finner du her: javax.servlet-api og gson.
Vi må også konfigurere en Servlet-container for å distribuere applikasjonen vår til. Denne artikkelen er et godt sted å begynne på hvordan du distribuerer en WAR på Tomcat.
3. Opprette en enhet
La oss lage en Ansatt enhet som senere vil bli returnert fra Servlet som JSON:
offentlig klasse ansatt {privat int id; privat strengnavn; privat strengavdeling; privat lang lønn; // konstruktører // standard getters og setters. }
4. Enhet til JSON
For å sende et JSON-svar fra Servlet vi trenger det først konvertere Ansatt motsetter seg JSON-representasjonen.
Det er mange java-biblioteker tilgjengelig for å konvertere et objekt til det JSON-representasjon og omvendt. Mest fremtredende av dem ville være Gson- og Jackson-bibliotekene. For å lære om forskjellene mellom GSON og Jackson, ta en titt på denne artikkelen.
Et raskt eksempel for å konvertere et objekt til JSON-representasjon med Gson vil være:
StrengmedarbeiderJsonString = ny Gson (). ToJson (ansatt);
5. Svar og innholdstype
For HTTP Servlets, den riktige prosedyren for å fylle ut svaret:
- Hent en utgangsstrøm fra svaret
- Fyll ut svaroverskriftene
- Skriv innhold til utgangsstrømmen
- Forplikt svaret
I et svar, a Innholdstype header forteller klienten hva innholdstypen til det returnerte innholdet faktisk er.
For å produsere et JSON-svar bør innholdstypen være applikasjon / json:
PrintWriter out = respons.getWriter (); respons.setContentType ("applikasjon / json"); respons.setCharacterEncoding ("UTF-8"); out.print (ansattJsonString); ut.flush ();
Svaroverskrifter må alltid være satt før svaret blir begått. Nettbeholderen ignorerer ethvert forsøk på å angi eller legge til overskrifter etter at svaret er begått.
Ringer flush () på PrintWriter forplikter svaret.
6. Eksempel på Servlet
La oss nå se et eksempel Servlet som returnerer et JSON-svar:
@WebServlet (name = "EmployeeServlet", urlPatterns = "/ employeeServlet") offentlig klasse EmployeeServlet utvider HttpServlet {private Gson gson = nye Gson (); @ Override beskyttet ugyldig doGet (HttpServletRequest forespørsel, HttpServletResponse svar) kaster IOException {ansatt ansatt = ny ansatt (1, "Karan", "IT", 5000); StrengmedarbeiderJsonString = this.gson.toJson (ansatt); PrintWriter out = respons.getWriter (); respons.setContentType ("applikasjon / json"); respons.setCharacterEncoding ("UTF-8"); out.print (ansattJsonString); ut.flush (); }}
7. Konklusjon
Denne artikkelen viste hvordan du returnerer et JSON-svar fra en Servlet. Dette er nyttig i webapplikasjoner som bruker Servlets til å implementere REST Services.
Alle kodeeksempler som vises her finner du på GitHub.