Как вернуть объект JSON из сервлета Java

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

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

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

10 ответов


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

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


запишите объект JSON в выходной поток объекта response.

вы также должны установить тип контента следующим образом, который будет указывать, что вы возвращаете:

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. Затем просто напишите его в response writer вместе с типом контента 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());

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


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

выход.print (json);

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

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

{}


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

Я предлагаю в формате JSON в Java от json.org.


Я Джексон преобразовать объект 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();

ответ.setContentType ("text/json");

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

строка your_string;

выход.write(your_string.getBytes ("UTF-8"));


вблизи BalusC ответ в 4 простых строках с помощью Google Gson lib. Добавьте эти строки в метод servlet:

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

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

удачи!