我有一个带有复合主键的实体,注释为@IdClass
。表示PK的类是可序列化的,因此我能够为该实体创建JPA存储库。
现在,我想创建一个控制器,其中一个操作是通过其ID获取一个实体。对于具有简单PK的其他实体(即整数),它很简单:
使用Path变量调用控制器/操作:myurl/controlles/action/1
我得到id
(本例中为1)变量,在存储库中,我可以调用findOne(id)
。
但是使用复合PK,我想我应该在某处指定如何序列化/反序列化它。例如,我会调用myurl/controllers/action/firstPKfield-secondPKfield
,然后告诉控制器它应该从一个字符串创建一个PK复合键,该字符串的两个字段都用-
分隔。
我是否朝着一个好方向前进?
答案 0 :(得分:0)
只需将路径值和将要用作分隔组合键的字符一起输入即可。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import static org.springframework.http.MediaType.TEXT_PLAIN_VALUE;
@RestController
public class Controller {
@GetMapping(value = "/poc/{firstKey}_{secondKey}", produces = TEXT_PLAIN_VALUE)
public String getResponse(@PathVariable String firstKey, @PathVariable String secondKey) {
return String.format("firstKey = %s\nsecondKey = %s", firstKey, secondKey);
}
}
输入
$ curl http://localhost:8080/controller/poc/ABCDEF_123456
输出
firstKey = ABCDEF
secondKey = 123456