Spring mvc控制器和复合主键

时间:2017-12-19 11:30:21

标签: spring spring-mvc jpa spring-data-jpa

我有一个带有复合主键的实体,注释为@IdClass。表示PK的类是可序列化的,因此我能够为该实体创建JPA存储库。

现在,我想创建一个控制器,其中一个操作是通过其ID获取一个实体。对于具有简单PK的其他实体(即整数),它很简单:

使用Path变量调用控制器/操作:myurl/controlles/action/1

我得到id(本例中为1)变量,在存储库中,我可以调用findOne(id)

但是使用复合PK,我想我应该在某处指定如何序列化/反序列化它。例如,我会调用myurl/controllers/action/firstPKfield-secondPKfield,然后告诉控制器它应该从一个字符串创建一个PK复合键,该字符串的两个字段都用-分隔。

我是否朝着一个好方向前进?

1 个答案:

答案 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