0

let's say I have a controller with an endpoint.

@controller
public class booksController{

  @SomeCustomAnnotation
  public String getBookOnlyName(){
   return new book();
    }


  public String getBookAllData(){
   return new book();
    }
}

In the book object I like to only serialize some fields.

  class book{
    @JsonView(Views.someClass.class)
    public String name;
    public String author;
}

Now I only want to serialize the "name" field from the book instance. And only from endPoint with annotation like "getBookOnlyName"

4

1 回答 1

0

默认情况下,未明确标记为视图一部分的属性会被序列化。因此,您将只注释您想要有条件地显示的属性,例如使用名为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(...);
  }
}

请注意,在这两种情况下,您仍然返回一本书;只是一个包含的属性比另一个少。

也就是说,请注意不要过度使用它,因为它可能会在维护和正确记录 API 端点时变得令人头疼。除非您迫切需要限制信息(例如出于安全目的),否则请支持一致的返回类型,并让您的调用者忽略与他们无关的信息。

于 2020-05-21T13:18:52.630 回答