2015-10-17 6 views
8

私はコントローラーSpring MVC 4ではJSONとしてBooleanを返すことは可能ですか?

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

で簡単な方法を持っていると応答して、私は{ "success": true }

Annontation @ResponseBodyを返したいが、応答がJSONになることを言います。しかし、今すぐrepsonseで私は真実を受け取る。

解決方法は他にありますか?

それとも私は、このためのベストプラクティスを知りたいのですが

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

のような何かをする必要があります。

答えて

16

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

あなたの質問に示されている地図アプローチは完全に有効です。あなたがしたい場合は、Collections.singletonMap()を使用して、それを素敵なワンライナーに圧縮することができます。

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

できません。変数名「success」は失われます。マップを使用するか、小さなラッパークラスを作成します。

public class BooleanResult { 
    public boolean success; 
} 
2

ただし、ブール値を返す​​の使用を検討し、成功を伝えるためにHTTPステータスコードを使用することはできません。

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

このメソッドは、空のドキュメントを返しますが、あなたはステータスコードを制御することができます(FORBIDDENは一例であり、あなたは、例えば、NOT FOUND、より適切なステータスコードを選んだことができますか?)

0

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

return JSONObject()。put( "result"、true).toString()。

関連する問題