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 设置为该模型之外,还有什么方法吗?
如果您返回的模型将特定于单个 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
以获取更多详细信息
| 归档时间: |
|
| 查看次数: |
5588 次 |
| 最近记录: |