如何为任何API端点(spring应用)设置自定义序列化器,并使用特定的注解?

问题描述 投票:0回答:1

比方说,我有一个带有端点的控制器。

@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 "等注解的端点序列化。

java spring serialization annotations java-custom-serialization
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(...);
  }
}

请注意,在这两种情况下,你仍然会返回一个Book,只是其中一个包含的属性会比另一个少。

也就是说,要注意不要过度使用,因为这可能会成为维护和正确记录你的API端点的一个头痛的问题。除非你有迫切的需要限制信息(例如出于安全的目的),否则偏向于使用一致的返回类型,让你的调用者忽略与他们无关的信息。

© www.soinside.com 2019 - 2024. All rights reserved.