Spring Boot中的api仅返回模型的特定字段

usr*_*_11 1 java spring-mvc spring-boot

我正在编写一个 spring boot api,它从数据库获取一些数据,存储在模型对象中并返回它。但我只想返回模型的几个字段作为 api 响应。

List<MyModel> myModelList = new ArrayList<>();
mongoUserCollection.find().into(myModelList);



 class MyModel{
    public int id; 
    public String name;
    public String lastname;
    public int age;
// getter & setter of all properties
    }
Run Code Online (Sandbox Code Playgroud)

我正在显示 myModelList 作为响应。作为回应,它显示了所有字段。如何仅显示特定字段,例如仅显示 ID 和年龄。仅从数据库中选择 ID 和年龄仍将显示响应中模型的所有字段(姓名和姓氏将显示为空)。除了创建新的 ModelView 类或将 JsonIgnore 设置为该模型之外,还有什么方法吗?

Avi*_*Avi 8

如果您返回的模型将特定于单个 API go with @JsonIgnore,下面的示例将忽略id响应中的

class MyModel{
    @JsonIgnore
    public int id; 
    public String name;
    public String lastname;
    public int age;
}
Run Code Online (Sandbox Code Playgroud)

但是假设相同的模型将用于不同的 API,并且每个 API 都有不同类型的结果,那么我强烈建议@JsonView处理这些模型。下面是一个简单的例子(将从MyModel您的问题中考虑)

创建一个带有空接口的Views.java类

public class Views {
    public interface MyResponseViews {};
}

Run Code Online (Sandbox Code Playgroud)

模型中

class MyModel{
  public int id; 
  @JsonView(Views.MyResponseViews.class)
  public String name;
  @JsonView(Views.MyResponseViews.class)
  public String lastname;
  public int age;
}
Run Code Online (Sandbox Code Playgroud)

您必须添加到发送此响应的控制器的最后一件事(假设您的控制器在这里)

MyModelController.java

class MyModelController {
   // Autowiring MyModelService ...

   
   @GetMapping("/get")
   @JsonView(Views.MyResponseViews.class)
   public ResponseEntity get() {
     // Your logic to return the result
   }

}
Run Code Online (Sandbox Code Playgroud)

上面的内容只会返回name,请参阅lastname 以获取更多详细信息