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' }";
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").
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();
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.
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());
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.
{}
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.)
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();
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());
}
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"));
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!
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