Playframework 什么';@Constraints.Required和@Formats.NonEmpty之间的区别是什么?

Playframework 什么';@Constraints.Required和@Formats.NonEmpty之间的区别是什么?,playframework,playframework-2.0,Playframework,Playframework 2.0,在游戏中创建模型时!2.x,您可以使用@约束。必需的和@格式。非空的。据我所知,它们是相同的,但它们都在同一领域使用,所以我可能错了。但是为什么呢 public class User extends Model { @Id @Constraints.Required @Formats.NonEmpty public String email; ... } @Constraints.Required检查属性是否已发送,以便只发送空的空格字符,它将有效

在游戏中创建模型时!2.x,您可以使用
@约束。必需的
@格式。非空的
。据我所知,它们是相同的,但它们都在同一领域使用,所以我可能错了。但是为什么呢

public class User extends Model {

    @Id
    @Constraints.Required
    @Formats.NonEmpty
    public String email;

    ...
}
  • @Constraints.Required
    检查属性是否已发送,以便只发送空的
    空格
    字符,它将有效
  • @forms.NonEmpty
    另外检查修剪值是否为空

约束和格式有完全不同的目标。一个用于格式化,另一个用于验证,所以

  • @Constraints.Required
    是一个验证,它确保值不为null
  • @Formats.NonEmpty
    是一个格式化程序,它修剪输入,如果字符串的长度为0(
    text.trim().isEmpty()
    ),则返回null。因此,该值被设置为null。之后,所需的注释就可以完成这项工作

因此,两者都使用通常很有用,但并非在所有情况下都有用。

@格式。非空
首先转换结果
@约束。必选
检查转换后的约束

例如:
字符串为
将通过
@约束。必需的
,因此,添加
@格式。非空的
将首先将
修剪为
null
@约束。必需的
可能引发错误

@格式也是如此。非空的
包含
@约束。必需的
?那么为什么要同时使用这两种格式呢?不太确定,但可能是
@约束。Required
检查变量是否可用,
@Formats
只检查值,因此,如果您尝试仅使用
@Formats
进行验证,则在未发送变量时,很可能会获得Null异常。(注意:我没有检查这个假设,只是在默认情况下使用了两者)