我正在创建一个订单服务,这是 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;
}
一切正常,但我对当前的设计感到担忧:
- 我正在读取 DTO 的输入
- 存储我要转换为 Order 对象的对象,该对象将由 Hibernate 保存
- 再次发送响应,我将实际订单对象转换为 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/