Java 서블릿에서 JSON 객체를 어떻게 반환합니까?
이전에는 서블릿으로 AJAX를 수행 할 때 문자열을 반환했습니다. 사용해야하는 JSON 객체 유형이 있습니까, 아니면 JSON 객체처럼 보이는 문자열을 반환합니까?
String objectToReturn = "{ key1: 'value1', key2: 'value2' }";
Java 서블릿에서 JSON 객체를 어떻게 반환합니까?
이전에는 서블릿으로 AJAX를 수행 할 때 문자열을 반환했습니다. 사용해야하는 JSON 객체 유형이 있습니까, 아니면 JSON 객체처럼 보이는 문자열을 반환합니까?
String objectToReturn = "{ key1: 'value1', key2: 'value2' }";
답변:
나는 당신이 제안한 것을 정확하게 수행합니다 ( String
).
그래도 JSON을 반환한다는 것을 나타내도록 MIME 유형을 설정하는 것을 고려할 수 있습니다 ( 이 다른 stackoverflow 게시물 에 따르면 "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();
String jsonStr = "{\"my_key\": \"my_value\"}";
먼저 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);
}
그게 다야.
Java 서블릿에서 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());
출력 스트림에 문자열을 작성하십시오. 도움이 필요하면 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": "juan", "apellido": "machado", "datosCriticos": [{ "edad": 12}]}
gson을 사용할 때 var가 비어 있으면 사람들을 위해 json을 만들지 않아야한다고 말해야합니다.
{}
Jackson 을 사용 하여 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();
Java 버전 (또는 JDK, SDK, JRE ... i dunno, 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());
}
Google Gson lib를 사용하여 BalusC와 가까운 간단한 4 줄로 답변합니다. 이 행을 서블릿 메소드에 추가하십시오.
User objToSerialize = new User("Bill", "Gates");
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("application/json;charset=UTF-8");
outputStream.print(new Gson().toJson(objToSerialize));
행운을 빕니다!
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에서 서블릿의 json 응답에서 도움이되었습니다.
다음과 같이 사용할 수 있습니다.
json 배열을 사용하려면 다음을 수행하십시오.
다음 과 같은 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 Object가 다음과 같이 사용되기를 바랍니다.
@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
{ key1: value1, key2: value2 }
?