spring - 从 DTO 填充实体的最佳方法是什么

标签 spring rest spring-boot dto

我正在创建一个订单服务,这是 RestServices 世界的新功能。

我需要将订单模型读入 OrderDTO 并保留在数据库中。

为此,我有以下方法:

@PostMapping(produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<OrderDTO> createOrder(@Valid @RequestBody OrderDTO orderDTO) {
    Order order = new Order(orderDTO);
    Order createdOrder = orderService.createOrder(order);
    OrderDTO createdOrderDTO = new OrderDTO(order);
    ResponseEntity<OrderDTO> responseEntity = new ResponseEntity<OrderDTO>(createdOrderDTO, null, HttpStatus.CREATED);
    return responseEntity;
}

一切正常,但我对当前的设计感到担忧:

  1. 我正在读取 DTO 的输入
  2. 存储我要转换为 Order 对象的对象,该对象将由 Hibernate 保存
  3. 再次发送响应,我将实际订单对象转换为 DTO。

最后,我将为每个请求创建 4-5 个对象,如果我的应用程序收到 100 个请求,则可能会遇到内存问题。

如何读取模型数据并有效地持久化?

最佳答案

一般情况下,更喜欢 DTO,因为单一职责原则,每个对象都有自己的职责,而且将 View/Controller 与 Model 对象分开也更清晰

有时您可以减少 OrderDTO,使用既是 DTD 又是真实对象的对象,

它将包括 DTD 属性以及您可以使用构建器添加的其他属性,例如,我使用 @JsonIgnoreProperties(ignoreUnknown = true) 在创建对象时仅设置 DTD 属性来自请求,例如:

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(Include.NON_NULL)
public class Order 

您还可以使用JsonGetter/JsonProperty/JsonSetter控制预期/返回的内容

@JsonGetter and @JsonSetter are old alternatives to @JsonProperty.

关于spring - 从 DTO 填充实体的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55467112/

相关文章:

java - 如何在 Spring MVC 中获取 JSON 作为响应?

java - 使用 LDAP 验证 Spring Web 服务

rest - 恢复连接后将离线本地数据与 REST API 同步的策略

Azure 数据湖 gen2 - 验证上传的文件(MD5?)

java - 如何使用 dropwizard 按 ID 检索对象?

java - 有什么方法可以将自定义字段发送到 mongo 存储库进行搜索吗?

java - 在 Spring Boot 中将 Oauth2 与 formlogin 和执行器安全性相结合

java - 实现基于注解的Spring AspectJ (JavaConfig)

java - 继承变量上的@ConfigurationProperties

java - 如何将 bean 加载到测试上下文中?