我想覆盖默认的CrudRepository save方法,该方法也导出到Rest api:
@RepositoryRestResource(path = "users")
public interface UserRepository extends JpaRepository<User, Long> {
@Override
@RestResource(exported=false)
User save(User user);
}
在我的ApiController中,我设置了这样的请求映射:
@RequestMapping(value = "/", produces = "application/json", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Resource<User>> registerUser(
@RequestParam("name") String name,
@RequestParam("alias") String alias,
@RequestParam("email") String email,
@RequestParam("password") String password,
@RequestParam("dateOfBirth") String dateOfBirth,
@RequestParam("imageIdentifier") String imageIdentifier) {
User user = new User();
//try {
// userReposiotry.save(user);
//} catch (Exception e) {
//}
Resource<User> resource = toResource(user);
return new ResponseEntity<Resource<User>>(resource, HttpStatus.OK);
}
问题是当我尝试POST到localhost:8080 / api / users时它会返回“Method Not allowed”,这很好,因为它设置为“exported = false” 但是如何为localhost实现自己的POST:8080 / api / users? 感谢
答案 0 :(得分:0)
另一种方法是创建一个自定义存储库实现,如下所示:
@RepositoryRestResource(path = "users")
public interface UserRepository extends JpaRepository<User, Long>, UserRepositoryCustom {
@Override
@RestResource(exported=false)
User save(User user);
}
public interface UserRepositoryCustom {
<S extends User> S save(T entity);
}
public UserRepositoryImpl implements UserRepositoryCustom {
<S extends User> S save(T entity) {
// implementation code...
}
}
如果您查看CrudRepository
,我会找到方法<S extends T> S save(S entity);
,这就是我从save(..)
获取的方法,只需将extends T
更改为extends User
我要注意的另一件事是类/接口的命名,尽量保持一致。我命名它们的方式应该适合您,UserRepositoryImpl
必须具有该名称才能使其正常工作。
执行此操作您无需设置exported=false
,您可以像平常一样使用save()
方法。
答案 1 :(得分:-1)
找到解决方案:
Button
在我的问题中,CrudRepository保存仍设置为exported = false。