web-dev-qa-db-ja.com

JavaサーブレットからどのようにJSONオブジェクトを返すのですか

どのようにしてJSONオブジェクトをJavaサーブレットから返すのですか。

以前はサーブレットでAJAXを実行するときに文字列を返していました。使用する必要があるJSONオブジェクト型がありますか、それともJSONオブジェクトのように見えるStringを返すだけですか。

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

私はあなたが提案したことと全く同じです(Stringを返します)。

ただし、JSONを返すことを示すためにMIMEタイプを設定することを検討してください( この他のstackoverflow投稿によると それは "application/json"です)。

56
Mark Elliot

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

まずJSONオブジェクトをStringに変換します。それからそれをapplication/jsonのコンテンツタイプとUTF-8の文字エンコーディングと共にレスポンスライターに書き出してください。

これは、JavaオブジェクトをJSON文字列に変換するために Google Gson を使用していると仮定した例です。

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

それで全部です。

また見なさい:

79
BalusC

どのようにして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.put("Mobile", 9999988888);
    json.put("Name", "ManojSarnaik");

    // finally output the json string       
    out.print(json.toString());
28
MAnoj Sarnaik

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"、 "アペリド": "machado"、 "datosCriticos":[{"edad":12}]}

Gsonを使うときあなたの変数varsが空であれば人々に言わなければなりませんそれはあなたのためのjsonを構築しません。

{}

8
superUser

出力ストリームに文字列を書き込むだけです。 MIMEタイプをtext/javascripteditapplication/jsonは明らかに役人です)に設定すると便利です。 (いつかそれを台無しにすることから何かを防ぐという小さいけれどもゼロ以外の可能性があります、そしてそれは良い習慣です。)

8
fennec

Javaコーディングの便宜のためにJSONオブジェクトがあるかもしれません。しかし、ついにデータ構造は文字列にシリアライズされます。適切なMIMEタイプを設定するといいでしょう。

JSON Java from json.org をお勧めします。

6
nil

私は Jackson を使って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
ravthiru

Javaのバージョン(またはJDK、SDK、JREなど、Javaエコシステムの新機能)に応じて、JsonObjectname__は抽象的です。つまり、これは新しい実装です。

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());
}
4
Rafael Barros

response.setContentType( "text/json");

// JSON文字列を作成します。何らかのフレームワークを使用することをお勧めします。

文字列your_string;

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

3
RHT

BalusC Google Gson libを使って4行で答えてください。この行をサーブレットメソッドに追加します。

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

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

がんばろう!

0
Panayot Kulchev

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応答 から役立ちます

0
xrcwrn