【问题标题】:Proper layer/Object for updating a model with a request object使用请求对象更新模型的适当层/对象
【发布时间】:2019-09-19 00:41:02
【问题描述】:
使用 Sprint 我有一个带有以下标头的端点:
@PutMapping("/{productId}")
Product updateProduct(@Valid @RequestBody ProductRequest productRequest) { ....
我应该在哪里将 ProductRequest 中的字段复制到现有产品?在服务?为此使用地图类?使用产品工厂?其他地方?
【问题讨论】:
标签:
spring
spring-mvc
architecture
【解决方案1】:
我认为我们应该使用 Rest/Mvc 控制器层进行以下操作:
1) 参数验证
2) 将传入参数(ProductRequest) 映射到服务模型(Product)
3) 使用服务模型调用服务
4) 返回结果或错误
因此,在您的情况下,您应该将 ProductRequest 映射到 Product 并将路径 Product 映射到服务。您可以在本文中找到其中一个经典示例:DTO Conversion:
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
public void updatePost(@RequestBody PostDto postDto) {
Post post = convertToEntity(postDto);
postService.updatePost(post);
}
还有一个经验法则是让控制器层尽可能薄。