比方说,我有一个带有端点的控制器。
@controller
public class booksController{
@SomeCustomAnnotation
public String getBookOnlyName(){
return new book();
}
public String getBookAllData(){
return new book();
}
}
在book对象中,我只想序列化一些字段。
class book{
@JsonView(Views.someClass.class)
public String name;
public String author;
}
现在我只想从书本实例中序列化 "name "字段,并且只从带有 "getBookOnlyName "等注解的端点序列化。
默认情况下,没有明确标记为视图一部分的属性会被序列化。因此,你只需要注释那些你想有条件地显示的属性,例如,用一个名为Detailed的视图。
public class Book {
public String name;
@JsonView(Views.Detailed.class)
public String author;
}
那么在你的控制器中,就不需要自定义注解了。只需重复使用相同的注解,例如:。
@RestController
public class BooksController {
public Book getBookSummary() {
return new Book(...);
}
@JsonView(Views.Detailed.class)
public Book getBookDetail() {
return new Book(...);
}
}
请注意,在这两种情况下,你仍然会返回一个Book,只是其中一个包含的属性会比另一个少。
也就是说,要注意不要过度使用,因为这可能会成为维护和正确记录你的API端点的一个头痛的问题。除非你有迫切的需要限制信息(例如出于安全的目的),否则偏向于使用一致的返回类型,让你的调用者忽略与他们无关的信息。