我上过这样的课:
public class EmailAddress {
public String value;
public String tld() {...}
public String host() {...}
public String mailbox() {...}
}
现在我在对象/实体中使用这个类:
@Entity
public class Customer {
public String name;
public EmailAddress mail;
}
现在,当我为Customer
执行rest服务时,我得到了以下格式:
{
"id": 1,
"name": "Test",
"email": {
"value": "test@test.de"
}
}
但我只要"email": "test@test.de"
{
"id": 1,
"name": "Test",
"email": "test@test.de"
}
我必须做什么?我使用Sping Boot 和Hibernate实体。
谢谢你的支持
2条答案
按热度按时间kzmpq1sx1#
您应该在请求处理中使用DTO类,并进行从DTO到实体以及反向的Map,例如:
tyu7yeag2#
应该将DataTransferObjects用于(REST)API。DTO只包含接口应该提供(或接收)的字段。
从客户机接收对象时,在从Controller返回对象之前,可以将DTO转换为域模型(可以是JPA实体类)。
控制器方法的示例。我们假设您从用户编辑器中获取一个对象,该对象包含您希望在数据库对象中更新的所有数据,并返回更新后的公司DTO:
和Converter类:
这是DTO
通过这种方式,您可以将API模型与JPA实体分离,可以使用相同的模型进行输入/输出,甚至可以使用不同的模型在服务内部工作,并最终在持久化数据之前(或阅读数据之后)将其转换为JPA实体。
有一些工具可以处理转换,如 mapstruct。
@Getter
,@Setter
,...来自项目lombok,非常便于自动生成样板代码。