Java 如何在保存前验证嵌入的文档?
我有一个基于spring和mongdb的基本SpringRESTAPI系统。 表示两个集合的两个简单模型:用户和书籍 一对多关系:一个用户可以有多本书 我想在创建/更新用户时验证books collection上是否存在相关书籍。这样做的最佳实践应该是什么?春天有解决办法吗 我考虑将书籍作为一个id数组,并在控制器中验证它们,然后如果验证正确,从书籍集合中获取它们并保存它们 然后我认为,用户模型应该有ID数组,而不是books对象 或者也许有更好的方法 用户模型: 用户控制器:Java 如何在保存前验证嵌入的文档?,java,spring,mongodb,spring-data,Java,Spring,Mongodb,Spring Data,我有一个基于spring和mongdb的基本SpringRESTAPI系统。 表示两个集合的两个简单模型:用户和书籍 一对多关系:一个用户可以有多本书 我想在创建/更新用户时验证books collection上是否存在相关书籍。这样做的最佳实践应该是什么?春天有解决办法吗 我考虑将书籍作为一个id数组,并在控制器中验证它们,然后如果验证正确,从书籍集合中获取它们并保存它们 然后我认为,用户模型应该有ID数组,而不是books对象 或者也许有更好的方法 用户模型: 用户控制器: 首先,应该使
首先,应该使用@DBRef或@Reference作为books属性。 关于验证书籍的最佳实践是使用mongo事件侦听器
@Component
public class BeforeSaveListener extends AbstractMongoEventListener<User> {
// you can inject the books repository
@Override
public void onBeforeSave(BeforeSaveEvent<User> event) {
// verify the books and throw exception if not valid
}
}
@RestController
@RequestMapping("/users")
public class UsersController {
@Autowired
UserRepository userRepository;
@GetMapping("/")
public List<User> getAllUsers() {
return userRepository.findAll();
}
@PostMapping("/")
public void createUser(@RequestBody User user) {
userRepository.save(user);
}
@GetMapping("/{id}")
public Optional<User> getUserById(@PathVariable("id") String id) {
return userRepository.findById(id);
}
@PutMapping("/{id}")
public void updateUser(@PathVariable("id") String id, @RequestBody User user) {
user.setId(id);
userRepository.save(user);
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable("id") String id) {
userRepository.deleteById(id);
@Component
public class BeforeSaveListener extends AbstractMongoEventListener<User> {
// you can inject the books repository
@Override
public void onBeforeSave(BeforeSaveEvent<User> event) {
// verify the books and throw exception if not valid
}
}