ジャクソンの@JsonView(Views.MyClass.class)が何なのかわかりません。私はこの方法でPOJOのフィールドとメソッドに注釈を付けることができることを知っています注釈のないものをフィルタリングするために JSONでシリアル化されることから。しかし、Views.Myclassクラスとは何ですか? Jacksonライブラリのテンプレートクラスですか?
そして、Viewsクラス内に多くのクラスがあるのはなぜですか?たとえば、次のようなものです。
class Views {
static class Public { }
static class ExtendedPublic extends PublicView { }
static class Internal extends ExtendedPublicView { }
}
なぜそれが必要で、どのように機能しますか?
@JsonView
を使用して、シリアル化のコンテキストに応じてフィールドをフィルタリングします。 RESTクライアントにデータを返すとき、どのRESTサービスが呼び出されたかに応じて、同じデータモデルを使用している間にシリアル化されるデータを制限する必要があります。
2つのRESTサービスを作成したいとしましょう:
最初のサービスは、姓や名などのユーザー情報を返しますが、それに添付されたメッセージは返しません。
2番目のサービスは、最初のサービスからのすべての情報と、現在のユーザーに添付されたメッセージを返します。
@JsonView
アノテーション付きのサンプルPOJOクラス
@JsonView(User.Views.Public.class)
public String getFirstname() {
return firstname;
}
@JsonView(User.Views.Public.class)
public String getLastname() {
return lastname;
}
@JsonView(User.Views.Internal.class)
public List<Message> getMessages() {
return messages;
}
@RestController
public class SimpleRestController {
@Autowired
SimpleService simpleService;
@RequestMapping(value = "/user/public", method = RequestMethod.GET)
@JsonView(User.Views.Public.class)
public User getUserWithPublicData() {
return simpleService.loadUser();
}
@RequestMapping(value = "/user/internal", method = RequestMethod.GET)
@JsonView(User.Views.Internal.class)
public User getUserWithInternalData() {
return simpleService.loadUser();
}
}