如何从 JavaServlet 返回 JSON 对象

如何从 Javaservlet 返回 JSON 对象。

以前在使用 servlet 执行 AJAX 时,我返回了一个字符串。是否需要使用 JSON 对象类型,还是仅仅返回一个看起来像 JSON 对象的 String。

String objectToReturn = "{ key1: 'value1', key2: 'value2' }";
509421 次浏览

我完全按照你的建议去做(返回一个 String)。

您可以考虑设置 MIME 类型来表明您正在返回 JSON (根据 另一个堆栈溢出的帖子,它是“ application/JSON”)。

只需在输出流中写入一个字符串。如果您觉得有帮助,可以将 MIME 类型设置为 text/javascript(编辑: application/json显然是官方的)。(有一个很小但不是零的机会,它可以防止某些事情在某一天搞砸它,这是一个很好的实践。)

为了方便 Java 编码,可能会有一个 JSON 对象。但是最后数据结构将被序列化为字符串。设置一个适当的 MIME 类型会很好。

我建议 JSON JavaJson.org

SetContentType (“ text/json”) ;

//创建 JSON 字符串,我建议使用一些框架。

字符串;

Write (your _ string. getBytes (“ UTF-8”)) ;

将 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的字符编码一起交给回复写手。

下面是一个假设使用 谷歌 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);
}

仅此而已。

参见:

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。只是

{}

如何从 JavaServlet 返回 JSON 对象

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

使用 Google Gson lib,在接近 BalusC的地方用4行简单的代码回答问题,将这些代码添加到 servlet 方法中:

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


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

祝你好运!

我使用 杰克逊将 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();

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

通过使用 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();
}


}
}

来自 Java 中来自 servlet 的 json 响应的帮助

你可以像。

如果你想使用 json 数组:

  1. 下载 Json-simple-1.1.1. jar并添加到您的项目类路径
  2. 创建一个名为 模特的类,如下图所示

    public class Model {
    
    
    private String id = "";
    private String name = "";
    
    
    //getter sertter here
    }
    
  3. In sevlet getMethod you can use like bellow

    @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();
    }
    
    
    }
    
  4. Output:

        [{"name":"Enamul Haque","id":"101"},{"name":"Md Mohsin","id":"102"}]
    

I you want json Object just use like:

@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