我正在使用Play 1.3
,我的Role
模型看起来像这样:
class Role{
// blabla
public String name;
@OneToMany(mappedby="role")
public List<Resource> resources = new ArrayList<>();
}
这是我的控制者的行动:
public static void save(Role role) {
role.save()
ok();
}
现在我需要在其上编写一个功能测试用例:
HashMap<String, String> params = new HashMap<>();
params.put("role.name", "new role abc");
// TODO : I need to add multiple resources here <<<----- Problem here
response = POST("/roles/save", params);
// blabla
无论如何都有解决这个问题的方法吗?我只需要向控制器发送重复的“resources.id”(它以真实浏览器的形式工作),但POST()
只接受Map<String,String>
。
答案 0 :(得分:0)
HTTP to Java binding上有一节可以帮到你:
Play也会使用相同的简单命名约定规则自动绑定任何模型类。
public static void create(Client client ) { client.save(); show(client); }
使用此操作创建客户端的查询字符串如下所示:
?client.name=Zenexity&client.email=contact@zenexity.fr
Play会创建一个Client实例,并将HTTP参数名称解析为该属性 客户对象。未解决的参数可以安全地忽略。类型不匹配也被安全地忽略。
要更新模型对象列表,请使用数组表示法并引用对象的ID。例如,假设客户端模型具有声明为列表客户客户的客户模型列表。要更新Customers列表,您需要提供如下的查询字符串:
?client.customers[0].id=123 &client.customers[1].id=456 &client.customers[2].id=789
所以我会说这样的事情可以解决你的问题:
HashMap<String, String> params = new HashMap<>();
params.put("role.name", "new role abc");
params.put("role.resources[0].id", "1");
params.put("role.resources[1].id", "10"); // etc.
response = POST("/roles/save", params);
// blabla