web-dev-qa-db-ja.com

@ResponseBody、ResponseEntity SpringはオブジェクトをJSONとして返します

Springバージョン4(spring data)を使用しています。ObjectをJSONとして返します

@RequestMapping(value = "/resources/users", method = RequestMethod.GET)
public ResponseEntity<User> getUserByLogonId(OAuth2Authentication auth) {

    String userLogonId = ((org.springframework.security.core.userdetails.User) auth.getUserAuthentication()
            .getPrincipal()).getUsername();
    UsersServices usersServices = new UsersServicesImpl(usersOperations);
    User user = usersServices.findByLogonId(userLogonId);
    HttpStatus userStatus = HttpStatus.NOT_FOUND;
    if (user != null) {
        userStatus = HttpStatus.FOUND;
    }
    return new ResponseEntity<User>(user, userStatus);
}

どんな体も説明できますか? ResponseBody/ResponseEntityはそれ自体で動作しますか? JSONとして返されるオブジェクトクラスに注釈を付ける必要がある場合。

5
Mohammad Karmi

@RestController自体が@ResponseBody注釈を追加します。 Github Issue で見ることができます

春の公式チュートリアル も確認できます。ここでは、以下の行と例を確認できます。

これらのコントローラーメソッドは、Bookmarkを除くすべての場合に、Collection<Bookmark>addなどの単純なPOJOを返します。 Accept headerを指定するHTTP要求が来ると、Spring MVCは、HttpMessageConverterドメインモデルタイプからAccept headerで指定されたコンテンツタイプに変換できるものが見つかるまで、構成済みのPOJOをループします(構成されている場合)。

Official doc の以下の行と例に従うこともできます

@RestControllerは、@ ResponseBodyと@Controllerを組み合わせたステレオタイプアノテーションです。それ以上に、それはあなたのコントローラーにより多くの意味を与え、またフレームワークの将来のリリースで追加のセマンティクスを運ぶかもしれません。

そして、

@RequestBodyおよび@ResponseBodyと同様に、SpringはHttpMessageConverterを使用して、要求ストリームと応答ストリームを相互に変換します。

1
sunkuet02

xmlRootElementは、オブジェクトをXMLドキュメントのXML要素として表すために使用します。 XMLはJSONとは関係ありません。
@RestControllerでクラスに注釈を付けると、クラスの@Controllerとすべてのメソッドの@ResponseBodyが結合されます。そして、HttpMessageConverterは要求ストリームと応答ストリームとの間で相互に変換します。
@ResponseEntityは、カスタムパラメータ(ヘッダー、httpコードなど)を使用してhttp応答を形成するために使用しています。例えば:

return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
1
Nikolay

Springブートはjackson jsonライブラリを使用して、Javaオブジェクトとjsonオブジェクト間のマーシャリングとアンマーシャリングを明示的に設定する必要はありません。

0
Srinivas Seema