我有一种情况,我可以将JPA实体作为休息请求发送和/或获取JPA实体作为休息响应
@RequestMapping(value = "/products", method = RequestMethod.POST) public @ResponseBody ProductDetailsResponse createNewProduct(@RequestBody ProductDetails newProduct) throws Exception {
ProductDetails 是一个实体
ProductDetails
@Entity @Table(name = "product") public class ProductDetails {
我应该使用它,还是从实体到另一种对象进行某种转换
没有硬性规定可以将JPA实体用作DTO(数据传输对象),但这不是一个好习惯(出于很好的理由和观点)。
除了DTO在规模上是实体的轻量级版本之外,还有其他优点。
我意识到的这样的优势之一就是关系的版本更浅,例如对于一对多单向关系,您的子实体也将引用您的父实体,但是您可以在DTO中断开该链,因此避免了很多JSON转换和无限循环相关问题。
我发现在DTO级别比从实体级别更容易进行JSON到Object的转换(反之亦然),因为实体表示数据库图而不是客户端业务图。
一个简单的通用实用程序类进行转换(从DTO到Entity,反之亦然)就足够了。您可以按照此处所述使用模型映射器API 。
我不让实体跨越服务层边界,它的所有DTO都在控制器上,而我不在控制器上进行转换。
附加的样板代码是DTO方法的一个缺点。