7

@ResponseBody結果を返すために使用するRESTAPIからのコードとMappingJacksonHttpMessageConverter、JSON形式でそれを返すためのコードがあります。

それはすべて、複雑なオブジェクトに対してうまく機能します。のようなプリミティブの場合int、{または[で始まらないJSONを取得しますbooleanstringこれは有効なJSONではありません。

そのような単純なタイプを返すための適切な方法は何でしょうか?次のようなオブジェクトにカプセル化する必要があります{ Result : true }か?

ありがとう

コードサンプル:

@RequestMapping(
        value = "/login",
        method = RequestMethod.POST)
@ResponseBody
public boolean Login(String username, String password) {
    return authenticationService.authenticate(username, password);
}

trueこれはちょうどまたはfalse無効なJSONであるを返します。オブジェクトまたは配列にカプセル化する必要があります(私が正しく理解している場合)。

4

2 に答える 2

8

true または false を返すだけです。そして、それはjsonではありません。

オブジェクトではないため、json にすることはできません。単純にプリミティブであるため、そのままで問題ありません。成功ハンドラーの javascript 変数に割り当てられます。

ブール値のリストを返す場合、配列を取得します:

[true,false,true]

完全に形成された json がプリミティブを返さない必要がある場合は、ハッシュマップまたはカスタム ラッパー オブジェクトを使用します。

public
@ResponseBody
Map<String, Boolean> getTrue() {
  Map<String, Boolean> map = new HashMap<String, Boolean>(1){{put("result", Boolean.TRUE);}};
  return map;
}

ハッシュマップを返すことは、必要な json を取得するためのおそらく最も簡単で最良の方法です。

{"result":true}
于 2012-10-16T09:25:07.687 に答える
4

使いやすいと思いました

public class ObjWrapper<T> implements Serializable {

  private T obj;

  public ObjWrapper(T obj) {
    this.obj = obj;
  }

  public T getObj() {
    return obj;
  }

}

次にコントローラーで:

@RequestMapping("/getString") @ResponseBody
public ObjWrapper<String> getString() { ...

そしてクライアント上(jquery)

$.getJson("getString", {}, function (data) {
            alert(data.obj);
          })

リストと同じ:

public class ListWrapper<T> implements Serializable {

  private List<T> content;

  public ListWrapper(T... objects) {
    content = Arrays.asList(objects);
  }

  public ListWrapper(List<T> content) {
    this.content = content;
  }

  public List<T> getContent() {
    return content;
  }

}
于 2013-01-06T19:45:41.607 に答える