【发布时间】:2013-10-06 16:13:45
【问题描述】:
我正在使用 Spring 构建一个简单的 AJAX/JSON Web 服务。常见的数据流是:
some DTO from browser
v
Spring @Controller method
v
Spring @Service method
我正在寻找处理数据验证的最简单方法。
- 我知道
@Valid注释在@Controller方法中运行良好。 - 为什么
@Valid不能在@Service方法中工作?
我的意思是:任何其他服务和控制器都可以使用服务方法。那么在@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 是常见的做法吗?
- 如果
yes:在服务方法中验证 DTO 的最佳做法是什么? - 如果
no:控制器是否应该操作域对象并让服务保存该对象? (这对我来说似乎毫无用处)
在我看来,服务应该只负责数据一致性。
你是怎么解决这个问题的?
【问题讨论】:
标签: spring validation spring-mvc service dto