后台用对象接收http请求的数据
首先我的数据库里有一个user表,并且有id,name,password属性。
实体User类:
package models;
import javax.persistence.Entity;
import play.db.jpa.Model;
@Entity
public class User extends Model {
private String name;
private String password;
//不需要定义id属性,因为Model里有id属性
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(String name, String password) {
super();
this.name = name;
this.password = password;
}
public User(Long id, String name, String password) {
super();
this.id = id;
this.name = name;
this.password = password;
}
public User() {
super();
}
}
HTML:
<button ng-click=test()>测试</button>
JS:
$scope.test = function() {
var id = 1;
$http({
method: 'GET',
url: '/Application/test?user.id=' + id,
}).then(function successCallback(response) {
// 请求成功执行代码
}, function errorCallback(response) {
// 请求失败执行代码
});
}
后台控制器:
public static void test(User user) {
System.out.println(user.getName() + user.getPassword());
String s = params.get("user.id");
System.out.println(s);
}
后台能够拿到数据,原理就是:
POJO对象绑定
使用同样的命名转换规则,Play也可自动对任何model类进行绑定。
public static void create(Client client ) {
client.save();
show(client);
}
使用上面这个create方法,创建一个client的查询字符串可以是下面这个样式:
?client.name=Zenexity&client.email=contact@zenexity.fr
Play将创建一个Client实例,同时把从http参数里取得的值赋值给对象中与http参数名同名的属性。不能明确的参数将被安全忽略,类型不匹配的也会被安全忽略。
参数绑定是通过递归来实现的,也就是说你可以采用如下的查询字符串来编辑一个完整的对象图(object graphs):
?client.name=Zenexity
&client.address.street=64+rue+taitbout
&client.address.zip=75009
&client.address.country=France
使用数组标记(即[])来引用对象的id,可以更新一列模型对象。比如,假设Client模型有一列Customer模型声明作为List Customer customers。为了更新这列Customers对旬,你需要提供如下查询字符串:
?client.customers[0].id=123
&client.customers[1].id=456
&client.customers[2].id=789
JPA 对象绑定
使用http到java的绑定,可以自动绑定一个JPA对象。
比如,在http参数里提供了user.id字段,当play找到id字段里,play将从数据库加载匹配的实例进行编辑,随后会自动把其他通过http请求提供的参数应用到实例里,因此在这里可以直接使用save()方法,如下:
public static void save(User user) {
user.save(); // ok with 1.0.1
}
和在POJO映射里采取的方式相同,你可以使用JPA绑定来编辑完整的对象图(object graphs),唯一区别是你必须为每个打算编辑的子对象提供id:
user.id = 1
&user.name=morten
&user.address.id=34
&user.address.street=MyStreet