【问题标题】:Return only specific fields of model from api in spring boot在 Spring Boot 中仅从 api 返回模型的特定字段
【发布时间】:2021-01-06 22:36:17
【问题描述】:

我正在编写一个 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
    }

我将 myModelList 显示为响应。作为回应,它显示了所有字段。如何仅显示特定字段,例如 id 和 age。从 db 中仅选择 id 和 age 仍将显示模型的所有字段作为响应(名称和姓氏将显示为空)。 除了创建新的 ModelView 类或将 JsonIgnore 设置为这个模型之外,还有什么办法吗?

【问题讨论】:

  • question 有帮助吗? @JsonIgnore

标签: java spring-boot spring-mvc


【解决方案1】:

如果您要返回的模型将特定于单个 API 使用 @JsonIgnore,则以下示例将忽略响应中的 id

class MyModel{
    @JsonIgnore
    public int id; 
    public String name;
    public String lastname;
    public int age;
}

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

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

public class Views {
    public interface MyResponseViews {};
}

在模型中

class MyModel{
  public int id; 
  @JsonView(Views.MyResponseViews.class)
  public String name;
  @JsonView(Views.MyResponseViews.class)
  public String lastname;
  public int age;
}

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

MyModelController.java

class MyModelController {
   // Autowiring MyModelService ...

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

}

以上将只返回namelastname 有关更多详细信息,请参阅此this

【讨论】:

  • 将此标记为已接受。 JsonView 正是我正在寻找的......谢谢
猜你喜欢
  • 1970-01-01
  • 2015-11-13
  • 2013-09-25
  • 1970-01-01
  • 2019-09-12
  • 2020-01-05
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
相关资源
最近更新 更多