有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java bindFromRequest验证为空

我是Java Play框架的新手,我正在尝试让身份验证工作起来。所以我遵循这个教程:https://www.playframework.com/documentation/2.1.0/JavaGuide4

这是我的代码:

public static Result authenticate()
{
    Form<Login> loginForm = form(Login.class).bindFromRequest();

    return ok(loginForm.toString());

}


public static class Login
{
    public String email;
    public String password;

    public String validate()
    {
        return "VALIDATE "+email+password;
    }
}

在authoticate()方法中,我可以看到表单提交的值,但Login类中的validate()方法看不到它们(变量始终为null)。。loginForm的输出。toString()包含:

Form(of=class controllers.Application$Login, data={email=asdf@asdf, password=asdf}, value=None, errors={=[ValidationError(,[VALIDATE nullnull],[])]})

如你所见,数据已被接收。。但在validate方法中,数据突然等于null。那么我该如何解决这个问题呢


共 (2) 个答案

  1. # 1 楼答案

    你没有提到你是如何调用validate()但是我认为这可能会起到作用,按照以下思路做一些事情:

    public static Result authenticate() {
        Form<Login> form = form(Login.class).bindFromRequest();
    
        // handle errors
        if (!form.hasErrors()) {
            Login login = form.get();
            Logger.debug(login.validate());
        } else {
            // bad request
        }
    }
    

    这对我有用

  2. # 2 楼答案

    如果您认为验证已经通过,那么模型中的方法validate应该返回null,否则应该返回错误消息文本。然后,您需要通过“hasGlobalError”方法检查表单是否包含错误。当validate()方法返回字符串而不是null时,将填充globalError。但在您的情况下,应该使用一些模型字段注释-https://www.playframework.com/documentation/2.3.x/api/java/play/data/validation/Constraints.html

    如果您想检查表单在这些方面是否失败,那么您可以使用“hasErrors”方法

    public static class Login {
    @Constraints.Email
    public String email;
    @Constraints.MinLength(value = 6)
    public String password;
    }
    

    该模型将检查提供的电子邮件是否真的是电子邮件,以及密码是否长于或等于6个字符

    注意:不要在模板上使用toString,应该使用render()