1

我有一个简单的 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 句柄。这是一个主要的痛苦。(除非我遗漏了什么。)

无需替换所有方法的最有效方法是什么?

4

2 回答 2

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);
    }
}
于 2014-10-17T21:12:00.650 回答
-1

看一下界面:

public Employee save(Employee employee)

您只需执行以下操作即可获取保存的实体

Employee saved = repository.save(employee);
return saved.getId();

话虽这么说,您肯定可以生成 Id 并通过setId(). 但是一旦 ID 被保存,它就是不可变的。更改 Id 并保存该实体将导致在 MongoDB 中保存一个新文档。

于 2014-10-17T07:11:10.310 回答