我有一个简单的MongoRepository我想修改以在post(save())上返回生成的ObjectId。
public interface EmployeeRepository extends MongoRepository<Employee, String>
{
public void delete(Employee employee);
public Employee save(Employee employee);
public Employee findOne(String id);
public List<Employee> findAll();
public Employee findByName(String principal);
}
我已经探索了生成id客户端的方法并在帖子中传递但是我真的希望Spring能够处理它。
我尝试拦截控制器并在ResponseBody中返回对象,如下所示:
@RequestMapping(value=URI_EMPLOYEES, method=RequestMethod.POST)
public @ResponseBody Employee addEmployee(@RequestBody Employee employee) {
return repo.save(employee);
}
问题是它迫使我为我重新处理所有HATEOAS相关逻辑Spring句柄。这是一个主要的痛苦。 (除非我错过了什么。)
在不必替换所有方法的情况下,最有效的方法是什么?
答案 0 :(得分:1)
使用 @Controller 代替 @RepositoryRestController ,这导致事情发生了变化。
我们现在可以轻松地覆盖此资源上的POST方法,以便在保持spring-data-rest的EmployeeRepository实现完整的同时返回我们想要的任何内容。
@RepositoryRestController
public class EmployeeController {
private final static String URI_EMPLOYEES = "/employees";
@Autowired private EmployeeRepository repo;
@RequestMapping(value=URI_EMPLOYEES, method=RequestMethod.POST)
public @ResponseBody HttpEntity<Employee> addVideo(@RequestBody Employee employee) {
return new ResponseEntity<Employee>(repo.save(employee), HttpStatus.OK);
}
}
答案 1 :(得分:-1)
看一下界面:
public Employee save(Employee employee)
您只需执行
即可获取已保存的实体Employee saved = repository.save(employee);
return saved.getId();
据说,您肯定可以生成ID并通过setId()
进行设置。但是一旦保存了ID,它就是不可变的。更改Id并保存该实体将导致在MongoDB中保存新文档。