【问题标题】:play framework: http requests : server : get(),post(),put() - can't understand how it works播放框架:http请求:服务器:get(),post(),put() - 无法理解它是如何工作的
【发布时间】:2015-02-08 17:07:44
【问题描述】:

Soooooo,我环顾四周,试图了解“http”请求是如何工作的……我尝试了一些方法,但我“以优异的成绩”失败了(好吧,抱歉)。 我想我很难理解一切是如何运作的......

例如...我有这个注册表:

@(page: String, isLoggedIn: Boolean, userInfo: NewUser)

@import bootstrap3._

@Main(page, isLoggedIn, userInfo) {

    <script src='@routes.Assets.at("javascript/index.js")'></script>
    <br><br><br>

   <br>
    <form action="@routes.Application.addUser()" method="POST">

    <div class="col-md-offset-1 col-md-4">
    <h3><b>Register : </b></h3>
    <br>
    Username :
    <input type="input" name="username" class="form-control"><br>
    First Name :
    <input type="input" name="first_name" class="form-control"><br>
    Last Name :
    <input type="input" name="last_name" class="form-control"><br>
    Password:
    <input type="password" name="password" class="form-control"><br>
    Repeat Password : 
    <input type="password" name="re_password" class="form-control"><br>
    <input type="submit"  class="btn">
    </div>

    </form>

}

使用此模型:

...
public class NewUser extends Model{

    @Id
    public String Id;

    public String username;
    public String first_name;
    public String last_name;
    public String password;
    public String re_password;

 +getters and setters

}

我想创建一种方法来使用我的服务器将用户添加到我的数据库中......

 public static Result addUser(){

      String url = "http://localhost/my-server-url";      
      NewUser user = Form.form(NewUser.class).bindFromRequest().get();


//    ? String charset = "ISO-8859-1";
//   ?  WSRequest wsRequest = WS.url(url);

//   ? HttpResponse wsResponse = wsRequest.post();
//    ? String responseString = wsResponse.getString(charset);
}

********** 现在怎么办……!? - 服务器如何知道如何填充我的数据库? (我认为 url 在这里有帮助......注册表应该具有与我的数据库相同的结构?) *********或者我怎样才能告诉他从数据库中的列表中给我一些东西(例如)?


有人可以解释一下它是如何工作的吗!? 非常感谢...

【问题讨论】:

    标签: http post playframework get server


    【解决方案1】:

    服务器如何知道如何填写我的数据库?注册表应该有 和我的数据库一样的结构吗?

    Play 包含几个不同的bind() 方法。其中一些支持 JSON 或请求值,另一些支持 Map&lt;String, String[]&gt; 实例。它们都在内部指向public Form&lt;T&gt; bind(Map&lt;String,String&gt; data, String... allowedFields) 方法。正如这个方法的名字所暗示的,它负责处理提交的数据。这意味着在这个方法中我们可以找到一个关于:

    接收到的数据规范化(将无序数据转换为解释对象,在本例中为 DataBinder 实例):

    DataBinder dataBinder = null;
    Map<String, String> objectData = data;
    if(rootName == null) {
        dataBinder = new DataBinder(blankInstance());
    } else {
        dataBinder = new DataBinder(blankInstance(), rootName);
        objectData = new HashMap<String,String>();
        for(String key: data.keySet()) {
            if(key.startsWith(rootName + ".")) {
                objectData.put(key.substring(rootName.length() + 1), data.get(key));
            }
        }
    }
    

    所以这条线

    Form.form(NewUser.class).bindFromRequest() 
    

    在您的控制器中创建一个NewUser 类型的表单对象,并将请求映射到内部NewUser 对象字段,如上面的代码所示。因此表单字段名称应与您的实体字段名称相同,以便保存在数据库中。

    那么现在……!?

    现在做完

     NewUser user = Form.form(NewUser.class).bindFromRequest().get();
    

    在你的控制器中,你必须通过这样做来保持这个实体

    user.save();
    

    它将被保存在数据库中。您也可以将此对象发送给您的模型调用保存方法。

    我怎么能告诉他把数据库里的东西给我 列表(例如)?

    假设你必须找到所有保存在数据库中的NewUser。所以你可以通过

    public static Finder<Integer, Member> find = new Finder(Integer.class, NewUser.class);
    public static List<NewUser> all(){
            return find.all();
        }
    

    在您的模型类中并在您的控制器中调用此 all() 方法。

    您可以随时从您下载的文件夹中提供的播放samples 中获得帮助。

    注意:我在这里假设您使用的是默认的播放方式,即 ebean

    Source1Source2

    【讨论】:

    • 我不明白....谁是“数据”? ...我可以看到它来自:public Form bind(Map data, String... allowedFields) ...但是...它是谁?我该如何添加: public Form bind(Map data, String... allowedFields) ? ...
    • @Mădălina 我向您展示了游戏的内部代码,您无需对其执行任何操作,您只需 Form.form(NewUser.class).bindFromRequest() 其余的事情将由游戏处理
    • 天哪,就这么简单!?好的,谢谢...我希望我在这里做得很好。谢谢你的回答....你知道我什么时候必须使用我的服务器和一个 http 请求吗?如果我可以这么简单地保存数据,我为什么需要那些东西?像 ws 响应......等等!?
    猜你喜欢
    • 2014-12-07
    • 2018-12-13
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2011-08-09
    • 2016-12-22
    相关资源
    最近更新 更多