我有我的存储库类,它暴露了REST接口
@RepositoryRestResource(collectionResourceRel = "user", path = "user")
public interface UserRepository extends CrudRepository<User, Integer> {
}
我想避免通过POST请求插入重复的对象。
我使用约束保护我的数据库,现在它在数据库方面没问题。但是在每次尝试插入重复对象时,日志文件中都有例外。
我可以实现一个控制器来管理POST请求并自己进行必要的检查。
但对我而言,这是一项非常常见的任务,可能已在春季实施。
避免重复的规范和简单方法是什么?
答案 0 :(得分:4)
您可以在创建之前创建并注册&#39;应用程序事件监听器,详见手册:
http://docs.spring.io/spring-data/rest/docs/current/reference/html/#events
@RepositoryEventHandler
public class UserEventHandler {
@Autowired
private UserRepository repository;
@HandleBeforeCreate
public void handleUserCreate(User user) {
//check database
if(duplicate){
throw new DuplicateUserException(user);
}
}
}
您可以注册@ControllerAdvice
以返回一些有意义的回复。例如:
@ControllerAdvice
public class ExceptionHandlingAdvice{
@ExceptionHandler(DuplicateUserException.class)
@ResponseStatus(HttpStatus.CONFLICT)
@ResponseBody
public Map<String, Object>
handleDuplicateUserException(DuplicateUserException exception){
Map<String, Object> map = new LinkedHashMap<>();
map.put("duplicateUser", exception.getUser().getUserName());
return map;
}
}