gpt4 book ai didi

java - 分层架构中的 Spring Boot Restful API 验证

转载 作者:行者123 更新时间:2023-12-01 13:10:10 36 4
gpt4 key购买 nike

今天,我与我们的一位团队成员就 Controller 中的 RESTful API 输入的验证进行了深入讨论。和 Service层,我觉得这是进行更大争论的糟糕日子。所以我们有一个分层架构的spring boot微服务应用

Controller --> Service --> Repository

论点是在每一层进行验证或仅在 Controller 进行验证层 ,例如我们有 ControllerPOST请求和使用 JSR-380输入请求正文的验证

Controller :
@PostMapping(value = "/", consumes = {"application/json"}, produces = {"application/json"})
public ResponseEntity<Detail> createConfig(

@NotNull(message = "{error.message.config_detail}")
@RequestBody @Validated Config config) {

return new ResponseEntity<>(configService.create(config.getConfigId(), config.getTaskId()), HttpStatus.CREATED);
}

配置:请求正文
public class Config {

@ApiModelProperty(name = "config_id", example = "1", required = true)
@NotNull(message = "{error.message.config_id}")
private Long configId;

@ApiModelProperty(name = "task_id", example = "11", required = true)
@NotNull(message = "{error.message.task_id}")
@Min(value = 0, message = "{error.message.task_id}")
@Max(value = 9999, message = "{error.message.task_id}")
private Integer taskId;

// bunch of addition fields with validations

}

如果验证成功则调用 Service具有来自 Config 的一些属性的方法

服务:
public Detail create(@Valid @NotNull Long configId, @NotNull Integer taskId) {

// some business logic to convert to entity and saving to database

return repository.save(entity));
}

所以如果我们看到上面的代码,同样的验证是在 Controller 上完成的。和 Service , 所以我认为没有必要在 Service 中进行验证层,在 Controller 层执行验证,如果输入错误则抛出 400500给用户。 但是团队中的另一个人也建议在每个块中对块中使用的任何内容进行验证,以便单个代码是安全的(专注于单元而不是集成路径)。

我知道在这种情况下我可能是错的,但仍然无法理解每一层的验证,(我同意空检查)所以建议在每个级别进行验证的方法
Controller --> validation call service

Service ---> validation and call business

Business ---> validation and call repository

Repository --> save

但首选的验证方式是什么? 据我说如果 Controller输入有效调用 Service并执行业务逻辑并调用 Repository .如果我错了,请纠正我,以便我可以遵循推荐的模式

最佳答案

你是对的:如果可能,验证应该放在 Controller 中。在我看来,验证数据超过 1 次是没有意义的。
另见 DRY 原理 https://en.wikipedia.org/wiki/Don%27t_repeat_yourself

关于java - 分层架构中的 Spring Boot Restful API 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59537533/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com