如何动态获取“ id”以设置对象

时间:2020-01-10 17:39:55

标签: spring-boot spring-data-jpa spring-data

好吧,在getOne()内,我要强制使用用于测试的 id 。我需要动态地通知我将在GuiaRecolhimento中设置PagamentoGuia中的哪个 id 。我该怎么办?

@PostMapping
public PagamentoGuia create(@RequestBody  PagamentoGuia pagamentoGuia) {

     GuiaRecolhimento g = repositoryGuia.getOne((long) 764);

     pagamentoGuia.setGuia(g);

     return repository.save(pagamentoGuia);
}

2 个答案:

答案 0 :(得分:0)

通过PathVariable接收PostMapping网址中的ID。

@PostMapping(value = "/{id}")
public PagamentoGuia create(@RequestBody  PagamentoGuia pagamentoGuia, @PathVariable(value = "id") Long id) {

    GuiaRecolhimento g = repositoryGuia.getOne(id);

    pagamentoGuia.setGuia(g);

    return repository.save(pagamentoGuia);
}

编辑: 我同意Matheus Cirillo

为了根据REST模式遵循正确的语义,可以使用DTO对象。

public class PagamentoGuiaDto {
   private Long guiaRecolhimentoId;

   // all attributes of PagamentoGuiaDto
   // all getters and setters
}

@PostMapping
public PagamentoGuia create(@RequestBody  PagamentoGuiaDto dto) {

GuiaRecolhimento g = repositoryGuia.getOne(dto.getPagamentoGuiaId());

PagamentoGuia pagamentoGuia = new PagamentoGuia();
pagamentoGuia.setGuia(g);

// set the values of dto to pagamentoGuia

return repository.save(pagamentoGuia);

}

答案 1 :(得分:0)

恕我直言,您必须创建一个DTO来接收GuiaRecolhimento的ID。

由于您正在数据库中创建PagamentoGuia,因此适当接收id的{​​{1}}作为路径变量,因为它与我们所指的主要系列(PagamentoGuia)。

使用DTO。这样,您就可以根据REST模式遵循正确的语义。