我正在创建一个订单服务,这是RestServices世界的新功能。
我需要将订单模型读入OrderDTO
并在DB中持久化。
为此,我有以下方法:
@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;
}
一切正常,但我对目前的设计有顾虑:
最后,我将创建每个请求4-5个对象,如果我的应用程序得到100个请求,它可能会遇到内存问题。
如何读取模型数据并有效地坚持?
我看不出设计有任何问题。
正如尼泽特指出的那样。创建的对象是短暂的。
通常遵循DTO和实体设计,以保持UI和服务层分离。
通过这种方式,您可以选择过滤掉传递给世界的敏感信息,如密码pin。
但是如果你愿意,你可以直接在Controller类中使用订单
实体。
我不会建议,但这是可能的。
我更喜欢像Mapstruct这样的Mapper:
OrderDtoMapper mapper = new OrderDTOMapper();
Order order = OrderDtoMapper.map(orderDto, Order.class);
和回:
OrderDTO createdOrderDTO = OrderDtoMapper.map(order, OrderDTO.class);
对我来说,代码看起来更可读...你没有太多可写的,因为Mapstruct会自动映射它。因为看起来你会映射很多;)也许映射器值得一试:http://mapstruct.org/
一般来说,更喜欢DTO,因为单一责任原则
,每个对象都有自己的责任,而且将View/Controller与Model对象分开也更清楚
有时,您可以将OrderDTO减少为
,使用一个既是DTD又是真实对象的对象,
它将包括DTD属性以及您可以使用builder添加的其他属性。例如,我使用
@JsonIgnoreProperties(ignoreUnknown=true)
在根据请求创建对象时仅设置DTD属性,例如:
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(Include.NON_NULL)
public class Order
您还可以使用JsonGetter/JsonProperty/JsonSetter来控制预期/返回的内容
@JsonGetter和@JsonSetter是@JsonProperty的旧替代品。
问题内容: 我已经看到了许多不同的方法来创建和填充数字表。但是,创建和填充一个的最佳方法是什么?从“最重要”到“最不重要”定义“最佳”: 用最佳索引创建的表 产生最快的行 用于创建和填充的简单代码 问题答案: 这是一些从网上获取的代码示例,以及对该问题的解答。 对于每种方法,我都修改了原始代码,因此每种方法都使用相同的表和列:NumbersTest和Number,具有10,000行或尽可能接近的行
我这里有一个相对复杂的JavaCRUD用Swing组件编写。我正在考虑在JavaFX中重写它的GUI。现在的问题是: 我创建了一个类,用于保存下载的数据、存储SQL命令和有关任何给定表的其他信息。我在表的构造函数中定义了该表的数据结构。这样地: 这样一来,每当数据库表结构发生变化时,我就不必接触这个类的代码。我将镜像构造函数中的更改,并相应地编辑GUI。 (在类内部,数据存储为ArrayList。
问题内容: 我是NHibernate(和ORMS)的新手,并试图掌握它提供的各种选择。作为参考,我将Fluent NHibernate与单独的业务对象配合使用,而后者又将DTO纯粹用于数据访问。我的应用程序体系结构必须同时支持Windows和Web“前端”。 我的选择是一般方法之一,因为似乎有很多选择。我的DTO看起来像下面的示例。每个DTO都有对ISession的引用,该引用从BO传递给它们。他
我们有一个微型应用程序,它由前端开发人员组装起来,然后“翻墙而去”。它定义了一个属性文件settings.js: 由html引用: 我想在运行时在application.yml中定义solr路径,如下所示: ) 可能 我曾考虑将'settings.js'作为一个Tymeleaf模板(settings.js.html),并让一个spring控制器从application.properties填充模型
我正在用Spring Boot开发一个简单的todo应用程序。我正在使用JWT进行授权。将使用以下endpoint获取属于用户的所有TODO。 我这里有两个问题: 从令牌获取用户名是一种很好的做法吗 使用令牌从控制器类或服务类访问用户名的最佳方式是什么 这个答案显示了如何从控制器类访问令牌。但如果我们想从服务类访问令牌,该怎么办?这个答案说明了这一点。但该类已被弃用。
问题内容: 当前,我们的开发团队使用这种模式,但是我不禁想知道是否存在更快或更有效的html方式来完成同一任务。 的HTML 这是Javascript: 问题答案: 这是我为此编写的函数。我不确定它是否比jQuery Templates更快。 它一次创建并附加一个Option元素,这可能比Templates慢 。我怀疑Templates会构建整个HTML字符串,然后一次创建所有DOM元素。那可能更