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-typeをtext/javascript
(edit: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を使用しているときにvarsが空の場合は、jsonがビルドされないので、人に言わなければなりません。
{}
私が使用ジャクソンを次のようにJSON文字列と送信するためにJavaオブジェクトを変換します。
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());
}
Google Gson libを使用した4つの簡単な行でBalusC回答に近い。次の行をサーブレットメソッドに追加します。
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オブジェクトにちょうど使用したい:
@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 }
か?