web-dev-qa-db-fra.com

Comment renvoyer un objet JSON depuis un servlet Java

Comment renvoyer un objet JSON sous la forme d'un servlet Java.

Auparavant, lorsque AJAX avec un servlet, j'ai renvoyé une chaîne. Existe-t-il un type d’objet JSON à utiliser, ou renvoyez-vous simplement une chaîne qui ressemble à un objet JSON, par exemple.

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

Je fais exactement ce que vous suggérez (retournez un String).

Cependant, vous pourriez envisager de définir le type MIME pour indiquer que vous retournez JSON (selon cet autre message de stackoverflow c'est "application/json").

56
Mark Elliot

Ecrivez l'objet JSON dans le flux de sortie de l'objet de réponse.

Vous devez également définir le type de contenu comme suit, ce qui spécifiera ce que vous retournez:

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();
168
user241924

Commencez par convertir l'objet JSON en String. Ensuite, écrivez-le simplement au rédacteur de la réponse avec le type de contenu application/json et le codage de caractères UTF-8.

Voici un exemple en supposant que vous utilisez Google Gson pour convertir un objet Java en chaîne JSON:

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);
}

C'est tout.

Voir également:

79
BalusC

Comment renvoyer un objet JSON depuis un servlet Java?

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());
28
MAnoj Sarnaik

Gson est très utile pour cela. plus facile même. voici mon exemple:

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}]}

Je dois dire aux gens si vos vars sont vides lors de l’utilisation de gson il ne construira pas le json pour vous.

{}

8
superUser

Il suffit d'écrire une chaîne dans le flux de sortie. Vous pouvez définir le type MIME sur text/javascript (edit: application/json est apparemment officiel) si vous vous sentez utile. (Il y a une chance infime mais non nulle que cela empêche quelque chose de gâcher un jour, et c'est une bonne pratique.)

8
fennec

J'ai utilisé Jackson pour convertir Java Object en chaîne JSON et l'envoyer comme suit.

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();
7
ravthiru

Il peut y avoir un objet JSON pour la commodité du codage Java. Mais enfin, la structure de données sera sérialisée en chaîne. Définir un type MIME approprié serait bien.

Je suggérerais JSON Java à partir de json.org .

6
nil

Selon la version de Java (ou JDK, SDK, JRE ... je ne sais pas, si je suis nouveau dans l'écosystème Java, _], la JsonObject est abstraite. Donc, ceci est une nouvelle implémentation:

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());
}
5
Rafael Barros

response.setContentType ("text/json");

// crée la chaîne JSON, je suggère d'utiliser un framework.

String your_string;

out.write (your_string.getBytes ("UTF-8"));

3
RHT

Près de BalusC répondre en 4 lignes simples en utilisant Google Gson lib. Ajoutez ces lignes à la méthode servlet:

User objToSerialize = new User("Bill", "Gates");    
ServletOutputStream outputStream = response.getOutputStream();

response.setContentType("application/json;charset=UTF-8");
outputStream.print(new Gson().toJson(objToSerialize));

Bonne chance!

0
Panayot Kulchev

En utilisant Gson vous pouvez envoyer une réponse json voir code ci-dessous

Vous pouvez voir ce code

@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();
    }

  }
}

utile de réponse json de servlet en Java

0
xrcwrn