我正在用Spring構建一個直接的AJAX/JSON Web服務。常見的數據流是:服務或控制器中的Spring DTO驗證?
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
:也許應該控制器操縱域對象,只是讓保存該對象的服務? (這對我來說似乎很沒用)
在我看來,服務應該只負責數據的一致性。
你如何解決這個問題?
[檢查控制器或服務層中的先決條件]可能的重複(http://stackoverflow.com/questions/11929781/check-preconditions-in-controller-or-service-layer) –