Как вы возвращаете объект JSON из сервлета Java - PullRequest
150 голосов
/ 06 января 2010

Как вы возвращаете объект JSON из сервлета Java.

Ранее при выполнении AJAX с сервлетом я возвращал строку. Существует ли тип объекта JSON, который необходимо использовать, или вы просто возвращаете строку, которая выглядит как объект JSON, например,

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

Ответы [ 12 ]

168 голосов
/ 06 января 2010

Запись объекта 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();
79 голосов
/ 07 января 2010

Сначала преобразуйте объект 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);
}

Вот и все.

Смотри также:

56 голосов
/ 06 января 2010

Я делаю именно то, что вы предлагаете (верните String).

Возможно, вы захотите установить тип MIME, чтобы указать, что вы возвращаете JSON, хотя (в соответствии с этой другой статьей стекового потока это "application / json").

28 голосов
/ 08 апреля 2015

Как вы возвращаете объект 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.addProperty("Mobile", 9999988888);
    json.addProperty("Name", "ManojSarnaik");

    // finally output the json string       
    out.print(json.toString());
8 голосов
/ 24 октября 2014

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); * +1008 *

{ "Nombre": "Жуана", "Apellido": "Мачадо", "datosCriticos": [{ "Edad": 12}]}

Нужно сказать людям, если ваши переменные пусты при использовании gson, он не создаст для вас json. Просто

{}

8 голосов
/ 06 января 2010

Просто напишите строку в выходной поток. Вы можете установить MIME-тип на text/javascript ( edit : application/json, по-видимому, должностное лицо), если вы чувствуете себя полезным. (Существует небольшая, но ненулевая вероятность того, что когда-нибудь что-то не получится, и это хорошая практика.)

7 голосов
/ 16 января 2017

Я использовал Джексона для преобразования Java-объекта в строку 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();
6 голосов
/ 06 января 2010

Для удобства программирования Java может существовать объект JSON. Но, наконец, структура данных будет сериализована в строку. Было бы неплохо установить правильный тип MIME.

Я бы предложил JSON Java из json.org .

5 голосов
/ 21 октября 2018

В зависимости от версии 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());
}
3 голосов
/ 06 января 2010

response.setContentType ( "текст / JSON");

// создаем строку JSON, я предлагаю использовать некоторые фреймворки.

String your_string;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...