web-dev-qa-db-ja.com

Spring MVC 4でブール値をJSONとして返すことは可能ですか?

コントローラに簡単な方法があります

@RequestMapping("admin")
public @ResponseBody
Boolean admin() {
    Boolean success = true;
    return success;
}

と応答で私は戻りたい{ "success": true }

注釈@ResponseBodyは、応答がJSONになることを示しています。しかし、今の返事で私は真実を受け取ります。

それを解決する方法は他にありますか?

または私は次のようなことをするべきです

@RequestMapping("admin")
public @ResponseBody
Map<String, Boolean> admin() {
    Map<String, Boolean> success = new TreeMap<String, Boolean>();
    success.put("success", true);
    return success;
}

このためのベストプラクティスを知りたいのですが。

15
Maxim R

プリミティブ型(またはプリミティブラッパー型)を返してJSONオブジェクトを応答として取得することはできません。 Mapやカスタムドメインオブジェクトなどのオブジェクトを返す必要があります。

あなたの質問に示されたマップのアプローチは完全に有効です。必要に応じて、Collections.singletonMap()を使用して、コンパクトな1ライナーにできます。

@RequestMapping
@ResponseBody
public Map<String, Boolean> admin() {
    return Collections.singletonMap("success", true);
}
25

ブール値を返すことはできませんが、 ResponseEntities の使用を検討し、HTTPステータスコードを使用して成功を伝えます。

public ResponseEntity<String> admin() {
    if (isAdmin()) {
        return new ResponseEntity<String>(HttpStatus.OK);
    } else {
        return new ResponseEntity<String>(HttpStatus.FORBIDDEN);            
    }
}

このメソッドは空のドキュメントを返しますが、ステータスコードを制御できます(FORBIDDENは一例にすぎません。その後、より適切なステータスコードを選択できます。例:NOT FOUND?)

3
Oliver

ありえない。変数名「成功」は失われます。マップを使用するか、小さなラッパークラスを作成します。

public class BooleanResult {
    public boolean success;
}
1
atamanroman

私はこれを行うためにjsonobjectを使用しています。

return new JSONObject().put("result",true).toString().
0
Burak Keceli