gpt4 book ai didi

spring - 不要使用 RepositoryRestResource 插入重复项

转载 作者:行者123 更新时间:2023-12-01 12:24:03 25 4
gpt4 key购买 nike

我有我的存储库类,它公开了 REST 接口(interface)

@RepositoryRestResource(collectionResourceRel = "user", path = "user")
public interface UserRepository extends CrudRepository<User, Integer> {

}

我想避免通过 POST 请求插入重复的对象。

我用约束保护了我的数据库,现在在数据库端没问题了。但是每次尝试插入重复对象时,日志文件中都会出现异常。

我可以自己实现一个 Controller 来管理 POST 请求并进行必要的检查。

但对我来说,这是一个很常见的任务,可能已经在 Spring 中实现了。

避免重复的规范且简单的方法是什么?

最佳答案

您可以按照手册中的详细说明创建并注册“创建前”应用程序事件监听器:

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;
}
}

关于spring - 不要使用 RepositoryRestResource 插入重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41633363/

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