Hoe retourneer je een JSON-object van een Java-servlet

Hoe retourneer je een JSON-object van een Java-servlet.

Voorheen heb ik bij het doen van AJAX met een servlet een string geretourneerd. Is er een JSON-objecttype dat moet worden gebruikt, of retourneert u gewoon een String die eruitziet als een JSON-object, b.v.

String objectToReturn = "{ key1: 'value1', key2: 'value2' }";

Antwoord 1, autoriteit 100%

Schrijf het JSON-object naar de uitvoerstroom van het responsobject.

U moet ook het inhoudstype als volgt instellen, dat specificeert wat u retourneert:

response.setContentType("application/json");
// Get the printwriter object from response to write the required json object to the output stream      
PrintWriter out = response.getWriter();
// Assuming your json object is **jsonObject**, perform the following, it will return your json object  
out.print(jsonObject);
out.flush();

Antwoord 2, autoriteit 47%

Converteer eerst het JSON-object naar String. Schrijf het vervolgens naar de antwoordschrijver, samen met het inhoudstype application/jsonen de tekencodering van UTF-8.

Hier is een voorbeeld, ervan uitgaande dat u Google Gsongebruikt om een ​​Java-object naar een JSON-tekenreeks te converteren:

protected void doXxx(HttpServletRequest request, HttpServletResponse response) {
    // ...
    String json = new Gson().toJson(someObject);
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(json);
}

Dat is alles.

Zie ook:


Antwoord 3, autoriteit 32%

Ik doe precies wat je voorstelt (retourneer een String).

U kunt echter overwegen het MIME-type in te stellen om aan te geven dat u JSON retourneert (volgens deze andere stackoverflow posthet is “application/json”).


Antwoord 4, autoriteit 18%

Hoe retourneert u een JSON-object van een Java-servlet

response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
  //create Json Object
  JsonObject json = new JsonObject();
    // put some value pairs into the JSON object .
    json.addProperty("Mobile", 9999988888);
    json.addProperty("Name", "ManojSarnaik");
    // finally output the json string       
    out.print(json.toString());

Antwoord 5, autoriteit 6%

Ik heb Jacksongebruikt om Java Object naar JSON-tekenreeks te converteren en als volgt te verzenden.

PrintWriter out = response.getWriter();
ObjectMapper objectMapper= new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(MyObject);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
out.print(jsonString);
out.flush();

Antwoord 6, autoriteit 4%

Schrijf gewoon een string naar de uitvoerstroom. Je zou het MIME-type kunnen instellen op text/javascript(edit: application/jsonis blijkbaar officieel) als je je nuttig voelt. (Er is een kleine maar niet-nul kans dat het op een dag iets verpest, en het is een goede gewoonte.)


Antwoord 7, autoriteit 4%

Gson is hier erg handig voor. makkelijker zelfs.
hier is mijn voorbeeld:

public class Bean {
private String nombre="juan";
private String apellido="machado";
private List<InnerBean> datosCriticos;
class InnerBean
{
    private int edad=12;
}
public Bean() {
    datosCriticos = new ArrayList<>();
    datosCriticos.add(new InnerBean());
}

}

   Bean bean = new Bean();
    Gson gson = new Gson();
    String json =gson.toJson(bean);

out.print(json);

{“nombre”:”juan”,”apellido”:”machado”,”datosCriticos”:[{“edad”:12}]}

Ik moet zeggen dat mensen als de jouwe vars leeg zijn bij gebruik van gson, de json niet voor je zal bouwen. Alleen de

{}


Antwoord 8, autoriteit 4%

Er is mogelijk een JSON-object voor het gemak van Java-codering. Maar uiteindelijk wordt de datastructuur geserialiseerd naar string. Een correct MIME-type instellen zou fijn zijn.

Ik zou JSON Javavan json.org.


Antwoord 9, autoriteit 4%

Afhankelijk van de Java-versie (of JDK, SDK, JRE… ik weet het niet, ik ben nieuw in het Java-ecosysteem), het JsonObjectis abstract. Dit is dus een nieuwe implementatie:

import javax.json.Json;
import javax.json.JsonObject;
...
try (PrintWriter out = response.getWriter()) {
    response.setContentType("application/json");       
    response.setCharacterEncoding("UTF-8");
    JsonObject json = Json.createObjectBuilder().add("foo", "bar").build();
    out.print(json.toString());
}

Antwoord 10, autoriteit 2%

response.setContentType(“text/json”);

//maak de JSON-tekenreeks, ik raad aan om een ​​raamwerk te gebruiken.

String your_string;

out.write(your_string.getBytes(“UTF-8”));


Antwoord 11

Je mag hieronder liken gebruiken.

Als u json-array wilt gebruiken:

  1. download json-simple-1.1.1.jar& voeg toe aan je projectklassenpad
  2. Maak een klasse met de naam Modelzoals hieronder

    public class Model {
     private String id = "";
     private String name = "";
     //getter sertter here
    }
    
  3. In sevlet getMethod die je kunt gebruiken zoals hieronder

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
      //begin get data from databse or other source
      List<Model> list = new ArrayList<>();
      Model model = new Model();
      model.setId("101");
      model.setName("Enamul Haque");
      list.add(model);
      Model model1 = new Model();
      model1.setId("102");
      model1.setName("Md Mohsin");
      list.add(model1);
      //End get data from databse or other source
    try {
        JSONArray ja = new JSONArray();
        for (Model m : list) {
            JSONObject jSONObject = new JSONObject();
            jSONObject.put("id", m.getId());
            jSONObject.put("name", m.getName());
            ja.add(jSONObject);
        }
        System.out.println(" json ja = " + ja);
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().print(ja.toString());
        response.getWriter().flush();
       } catch (Exception e) {
         e.printStackTrace();
      }
     }
    
  4. Uitvoer:

       [{"name":"Enamul Haque","id":"101"},{"name":"Md Mohsin","id":"102"}]
    

Als je een json-object wilt, gebruik dan gewoon:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
        JSONObject json = new JSONObject();
        json.put("id", "108");
        json.put("name", "Enamul Haque");
        System.out.println(" json JSONObject= " + json);
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().print(json.toString());
        response.getWriter().flush();
        // System.out.println("Response Completed... ");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Boven functie Uitvoer:

{"name":"Enamul Haque","id":"108"}

Volledige bron wordt aan GitHub gegeven: https://github.com/enamul95/ServeletJson.git


Antwoord 12

Dicht bij BalusCantwoord in 4 eenvoudige regels met Google Gson lib. Voeg deze regels toe aan de servlet-methode:

User objToSerialize = new User("Bill", "Gates");    
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("application/json;charset=UTF-8");
outputStream.print(new Gson().toJson(objToSerialize));

Veel succes!


Antwoord 13

Door Gson te gebruiken, kunt u een json-antwoord sturen, zie onderstaande code

Je kunt deze code zien

@WebServlet(urlPatterns = {"/jsonResponse"})
public class JsonResponse extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("application/json");
    response.setCharacterEncoding("utf-8");
    Student student = new Student(12, "Ram Kumar", "Male", "1234565678");
    Subject subject1 = new Subject(1, "Computer Fundamentals");
    Subject subject2 = new Subject(2, "Computer Graphics");
    Subject subject3 = new Subject(3, "Data Structures");
    Set subjects = new HashSet();
    subjects.add(subject1);
    subjects.add(subject2);
    subjects.add(subject3);
    student.setSubjects(subjects);
    Address address = new Address(1, "Street 23 NN West ", "Bhilai", "Chhattisgarh", "India");
    student.setAddress(address);
    Gson gson = new Gson();
    String jsonData = gson.toJson(student);
    PrintWriter out = response.getWriter();
    try {
        out.println(jsonData);
    } finally {
        out.close();
    }
  }
}

behulpzaam van json-reactie van servlet in java

Other episodes