zoukankan      html  css  js  c++  java
  • 后台用对象接收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 

  • 相关阅读:
    在JavaWeb中使用Log4j步骤
    关于我为什么不再更新博客园了
    windows termial 配置文件
    windows10 命令行修复系统引导
    vscode修改code runner插件默认使用的编译器
    windows下vscode修复c++找不到头文件
    windows下安装mingw-w64
    vscode美化方法以及定制主题插件
    windows下隐藏磁盘分区
    2018 icpc 徐州网络赛 F Features Track
  • 原文地址:https://www.cnblogs.com/zhengbiyu/p/8430716.html
Copyright © 2011-2022 走看看