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として返されるオブジェクトクラスに注釈を付ける必要がある場合。
@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を使用して、要求ストリームと応答ストリームを相互に変換します。
xmlRootElement
は、オブジェクトをXMLドキュメントのXML要素として表すために使用します。 XMLはJSONとは関係ありません。@RestController
でクラスに注釈を付けると、クラスの@Controller
とすべてのメソッドの@ResponseBody
が結合されます。そして、HttpMessageConverter
は要求ストリームと応答ストリームとの間で相互に変換します。@ResponseEntity
は、カスタムパラメータ(ヘッダー、httpコードなど)を使用してhttp応答を形成するために使用しています。例えば:
return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
Springブートはjackson jsonライブラリを使用して、Javaオブジェクトとjsonオブジェクト間のマーシャリングとアンマーシャリングを明示的に設定する必要はありません。