Как вы возвращаете объект JSON из сервлета Java
Как вы возвращаете объект JSON из сервлета Java?
Ранее при выполнении AJAX с сервлетом я возвращал строку. Есть ли тип объекта JSON, который нужно использовать, или вы просто возвращаете строку, которая выглядит как объект JSON, например
String objectToReturn = "{ key1: 'value1', key2: 'value2' }";
11 ответов
Я делаю именно то, что вы предлагаете (вернуть String
).
Вы могли бы рассмотреть возможность установки типа MIME, чтобы указать, что вы возвращаете JSON, хотя (согласно этому другому посту stackru это "application/json").
Запишите объект JSON в выходной поток объекта ответа.
Вы также должны установить тип контента следующим образом, который будет указывать, что вы возвращаете:
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();
Сначала преобразуйте объект JSON в String
, Затем просто запишите это автору ответа вместе с типом содержимого application/json
и кодировка символов UTF-8.
Вот пример, предполагающий, что вы используете Google Gson для преобразования объекта Java в строку 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);
}
Это все.
Смотрите также:
Как вы возвращаете объект JSON из сервлета 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.put("Mobile", 9999988888);
json.put("Name", "ManojSarnaik");
// finally output the json string
out.print(json.toString());
Я использовал Джексона для преобразования Java Object в строку JSON и отправки следующим образом.
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();
Просто напишите строку в выходной поток. Вы можете установить MIME-тип на text/javascript
(редактировать: application/json
по-видимому, чиновник), если вы чувствуете себя полезным. (Существует небольшая, но ненулевая вероятность того, что когда-нибудь что-то не получится, и это хорошая практика.)
Gson очень полезен для этого. даже проще вот мой пример:
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":"хуан","Apellido": "Мачадо","datosCriticos":[{"Edad":12}]}
Нужно сказать людям, если ваши vars пустые при использовании gson, он не создаст для вас json. Просто
{}
Для удобства программирования Java может существовать объект JSON. Но, наконец, структура данных будет сериализована в строку. Установка правильного типа MIME было бы неплохо.
Я бы предложил JSON Java с сайта json.org.
В зависимости от версии Java (или JDK, SDK, JRE... я не знаю, я новичок в экосистеме Java), JsonObject
абстрактно. Итак, это новая реализация:
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("текст / JSON");
// создаем строку JSON, я предлагаю использовать некоторые фреймворки.
Строка your_string;
out.write (your_string.getBytes ("UTF-8"));
Вы можете использовать как показано ниже.
Если вы хотите использовать массив json:
- загрузите json-simple-1.1.1.jar и добавьте в путь класса вашего проекта
Создайте класс с именем Model, как показано ниже
public class Model { private String id = ""; private String name = ""; //getter sertter here }
В sevlet getMethod вы можете использовать как показано ниже
@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(); } }
Выход:
[{"name":"Enamul Haque","id":"101"},{"name":"Md Mohsin","id":"102"}]
Я хочу, чтобы объект json использовал просто так:
@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();
}
}
Над функцией Выход:
{"name":"Enamul Haque","id":"108"}
Полный исходный код предоставляется на GitHub: https://github.com/enamul95/ServeletJson.git
Используя Gson, вы можете отправить ответ json, см. Ниже код
Вы можете увидеть этот код
@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();
}
}
}
полезно из ответа json от сервлета в Java
Рядом с BalusC ответ в 4 простых строчках, используя Google Gson lib. Добавьте эти строки в метод сервлета:
User objToSerialize = new User("Bill", "Gates");
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("application/json;charset=UTF-8");
outputStream.print(new Gson().toJson(objToSerialize));
Удачи!