java - 如何在spring boot中从pojo类返回所需参数作为json响应?
问题描述
我想做的是,如果我上一堂 pojo 课,比如
@Entity
@Table(name = "property_table")
public class Property {
@Id
@Column(name = "property_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int propertyId;
@Column(name = "property_name")
private String propertyName;
@Column(name = "property_type")
private String propertyType;
}
在 RestController 我写了两个方法,比如
@GetMapping(value = "/getProperties", produces = { "application/json",
"application/xml" }, consumes = { "application/xml", "application/json" })
@ResponseBody
public List<Property> getProperties() {
//some code
}
@GetMapping(value = "/getPropertyById", produces = { "application/json",
"application/xml" }, consumes = { "application/xml", "application/json" })
@ResponseBody
public Property getPropertyById() {
//some code
}
所以,听到我想要做的是第一个api方法我想要返回json,就像Property pojo类的一些参数一样,比如
对于 getProperties api 方法
{
"property":[
{
"propertyId":001,
"propertyName":"PROPERTY 1"
},
{
"propertyId":002,
"propertyName":"PROPERTY 2"
}
],
在上面的 json 中,我只想返回两个参数,即 propertyId、propertyName 和剩余参数,即 propertyType,我不想在 json 中重新调整。
怎么就这样回来了?
对于第二个 api 方法,我想返回所有三个参数。即,如下所示
对于 getPropertyById api 方法
{
"propertyId":001,
"propertyName":"PROPERTY 1",
"propertyType:"PROPERTY_TYPE 1"
},
如何使用具有不同参数的相同 pojo 类为不同的 api 方法维护不同的 json 响应。请帮我解决这个问题。谢谢。
解决方案
我强烈建议您@Entity
在“db”层中保持隔离。因此,数据库端的更改不会影响您的 API,反之亦然。此外,您可以更好地控制 API 中公开的数据。根据您的需要,您可以创建 2 个真正的 DTO,例如PropertyDto
和PropertyDetailsDto
(或使用私有字段和 getter/setter)。
public class PropertyDto {
public String propertyId;
public String propertyName;
}
public class PropertyDetailsDto extends PropertyDto {
public String propertyType;
}
将您映射@Entity
到与您的需求相对应的特定 dto。
编辑
public List<PropertyDto> getProperties() {
return toPropertyDtos(repository.findAll());
}
public PropertyDetailsDto getPropertyById(Long id) {
return toPropertyDetailsDto(repository.findBy(id));
}
in some Mapper.java
...
public static List<PropertyDto> toPropertyDtos(List<Property> properties) {
return properties.stream()
.map(Mapper::toPropertyDto)
.collect(toList());
}
private static PropertyDto toPropertyDto(Property property) {
PropertyDto dto = new PropertyDto();
dto.propertyId = property.propertyId;
dto.propertyName = property.propertyName;
return dto;
}
// same stuff for `toPropertyDetailsDto`, you could extract common mapping parts in a separate private method inside `Mapper`
...
推荐阅读
- libreoffice - Jodconverter:无法打开文档:tempfile.docx
- c - 如何将二维数组从函数传递到主函数?
- python - 一百万个文件的py照片拼接
- node.js - 如何在猫鼬中通过 req.body.username 设置默认值
- javascript - 在选择时显示新的表单选择器
- java - eclipse JPMS 运行配置模块路径缺少模块
- c# - 从 Docker 容器中的 .NET Core 应用程序访问主机上的 CSV 文件
- bash - sed:-e 表达式 #1,字符 8:未终止的 `s' 命令
- python - 将 256x256x256 numpy 数组调整为 64x64x64 numpy 数组。我正在尝试实现 4 的窗口大小来平均元素
- asp.net-core - 剑道组合框图标未加载