Spring 实现/覆盖MongoRepository保留HATEOAS格式

Spring 实现/覆盖MongoRepository保留HATEOAS格式,spring,mongodb,spring-data-rest,hateoas,spring-hateoas,Spring,Mongodb,Spring Data Rest,Hateoas,Spring Hateoas,我想修改一个简单的MongoRepository,以便在post(save())上返回生成的ObjectId 问题是它迫使我重新处理所有与HATEOAS相关的逻辑弹簧手柄。这是一个很大的痛苦。(除非我遗漏了什么。) 在不必替换所有方法的情况下,最有效的方法是什么?看看界面: public Employee save(Employee employee) 只需执行以下操作即可获得保存的实体 Employee saved = repository.save(employee); return sa

我想修改一个简单的MongoRepository,以便在post(save())上返回生成的ObjectId

问题是它迫使我重新处理所有与HATEOAS相关的逻辑弹簧手柄。这是一个很大的痛苦。(除非我遗漏了什么。)


在不必替换所有方法的情况下,最有效的方法是什么?

看看界面:

public Employee save(Employee employee)
只需执行以下操作即可获得保存的实体

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

也就是说,您当然可以通过
setId()
生成Id并进行设置。但是一旦一个ID被保存,它是不可变的。更改Id并保存该实体将导致在MongoDB中保存一个新文档。

正在使用@Controller而不是@RepositoryRestController,这将导致出现问题

现在,我们可以轻松地覆盖此资源上的POST方法,以返回我们想要的任何内容,同时保持SpringDataREST对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);
    }
}
@RepositoryRestController
公共类EmployeeController{
私有最终静态字符串URI_EMPLOYEES=“/EMPLOYEES”;
@自动连线私人雇员储蓄回购;
@RequestMapping(value=URI\u EMPLOYEES,method=RequestMethod.POST)
public@ResponseBody HttpEntity addVideo(@RequestBody Employee-Employee){
返回新的响应属性(repo.save(employee),HttpStatus.OK);
}
}

我觉得这已经给出了。问题是我不能简单地重写功能而不丢失Spring提供的HATEOAS和HAL格式。我想我不明白。您想要HATEOAS,但对于给定的对象。通过让控制器方法返回HttpEntity并创建相应的ResponseEntity(如
return new ResponseEntity(repo.save(employee),HttpStatus.OK))可以很容易地做到这一点我遗漏了什么吗?你说得对。我真正担心的是,当我实现一个控制器时,它会隐藏存储库,迫使我设置并重新实现所有内容。但这是因为我使用的是(at)控制器而不是(at)RepositoryRestController。现在我可以跳过post方法,剩下的留给Spring。谢谢,对不起,我说不清楚。这对我没用。从
@RestController
更改为
@RepositoryRestController
没有帮助。
Employee saved = repository.save(employee);
return saved.getId();
@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);
    }
}