我应该在休息请求和/或响应中使用jpa实体

Mel*_*ius 9 java rest hibernate jpa

我有一种情况,我可以发送JPA实体作为休息请求和/或获得JPA实体作为休息响应

@RequestMapping(value = "/products", method = RequestMethod.POST)
public @ResponseBody ProductDetailsResponse createNewProduct(@RequestBody ProductDetails newProduct)
        throws Exception {
Run Code Online (Sandbox Code Playgroud)

ProductDetails 是一个实体

@Entity
@Table(name = "product")
public class ProductDetails {
Run Code Online (Sandbox Code Playgroud)

我应该使用它,还是从实体到另一种对象进行某种转换

Sab*_*han 11

没有严格的规则,但是将JPA实体用作DTO(数据传输对象)并不是一个好的做法(非常好的理由及其非常自以为是的观点).

除了DTO在尺寸方面是轻量级实体之外,还有其他优点.

我意识到的一个这样的优点是更轻的版本的关系,例如对于一对多的单向关系,您的子实体也会引用您的父实体,但您可以在DTO中打破该链,以避免大量的JSON转换和无限循环相关问题.

我发现DTO级别的JSON到Object转换(反之亦然)比实体级别更容易,因为实体代表DB图而不是客户业务图.

一个简单的通用实用程序类来进行转换(从DTO到实体,反之亦然)就足够了.您可以使用此处所述的模型映射器API .

我不让实体跨服务层边界,它的所有DTO都在控制器上,我在控制器上进行转换.

关于这个主题的SO有非常有趣的问题,你可以浏览,

我应该将实体转换为Repository对象内的DTO并将其返回到服务层吗?

将DTO转换为实体,反之亦然

REST API - DTO或不是?

额外的锅炉板代码是DTO方法的一个缺点.