在Play scala中为某些对象类型的Route参数实现自己的对象绑定器

zoc*_*ana 5 controller scala routes playframework

好吧,我想把我的String param从下面的Play scala Route替换成我自己的对象,比如说"MyObject"

 From GET /api/:id  controllers.MyController.get(id: String)

 To GET /api/:id  controllers.MyController.get(id: MyOwnObject)
Run Code Online (Sandbox Code Playgroud)

任何关于如何做到这一点的想法将不胜感激.

Mon*_*ari 1

使用PathBindable绑定路径中的参数而不是查询中的参数。绑定来自以逗号分隔的路径的 id 的示例实现(无错误处理):

public class CommaSeparatedIds implements PathBindable<CommaSeparatedIds> {

    private List<Long> id;

    @Override
    public IdBinder bind(String key, String txt) {
        if ("id".equals(key)) {
            String[] split = txt.split(",");
            id = new ArrayList<>(split.length + 1);
            for (String s : split) {
                    long parseLong = Long.parseLong(s);
                    id.add(Long.valueOf(parseLong));
            }
            return this;
        }
        return null;
    }

    ...

}
Run Code Online (Sandbox Code Playgroud)

示例路径:

/data/entity/1,2,3,4
Run Code Online (Sandbox Code Playgroud)

示例路线条目:

GET /data/entity/:id    controllers.EntityController.process(id: CommaSeparatedIds)
Run Code Online (Sandbox Code Playgroud)