gpt4 book ai didi

服务或 Controller 中的 Spring DTO 验证?

转载 作者:IT老高 更新时间:2023-10-28 13:48:41 29 4
gpt4 key购买 nike

我正在使用 Spring 构建一个简单的 AJAX/JSON Web 服务。常见的数据流是:

  some DTO from browser

v

Spring @Controller method

v

Spring @Service method

我正在寻找处理数据验证的最简单方法。

  • 我知道 @Valid 注释在 @Controller 方法中运行良好。
  • 为什么 @Valid 不能@Service 方法中工作?

我的意思是:任何其他服务和 Controller 都可以使用服务方法。那么在 @Service 级别进行验证不是更有意义吗?


让我们举个简单的例子:

MyDTO.java:

public class MyDTO {
@NotNull
public String required
@Min(18)
public int age;
}

MyServiceImpl.java:

public MyDomainObject foo(MyDTO myDTO) {
// persist myDTO
// and return created domain object
}

MyController.java:

@Autowired
MyService myService;

@Autowired // some simple bean mapper like Dozer or Orika
Mapper mapper; // for converting domain objects to DTO

@RequestMapping(...)
public MyDomainObjectDTO doSomething(@RequestBody MyDTO myDTO) {
mapper.map(myService.foo(myDTO), MyDomainObjectDTO.class);
}

服务方法接收 DTO 是常见的做法吗?

  • 如果:在服务方法中验证 DTO 的最佳做法是什么?
  • 如果 no: Controller 是否应该操作域对象并让服务保存该对象? (这对我来说似乎毫无用处)

在我看来,服务应该只负责数据一致性。

你是怎么解决这个问题的?

最佳答案

我的回答?两者都有。

服务必须检查自己的契约(Contract)的有效性。

Controller 是 UI 的一部分。它应该验证和绑定(bind)以获得更好的用户体验,但服务不应该依赖它。

服务无法知道它是如何被调用的。如果将其包装为 REST 服务会怎样?

该服务还以任何 UI 都无法了解的方式了解业务逻辑违规。它需要验证以确保用例得到适当的满足。

双袋吧;两者都做。

关于服务或 Controller 中的 Spring DTO 验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19100317/

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