Fork me on GitHub

Validation

Parameters validation

将参数用作控制器方法参数或DTO字段值时,如果使用的是默认的受支持类型之一(有关更多信息,请参见"参数提取器"一章),它可能会产生转换错误. 例如,当您期望字段为整数但给定值包含字符时.

在这种情况下,可以通过调用控制器中的validation.hasViolations()方法来给validation -parameter中的转换问题,该方法为truefalse . 您可以使用getViolations()方法检查哪些参数导致了违规. 然后,将根据其验证批注检查没有引起任何转换错误的每个字段或参数.

Bean validation

Ninja使用Hibernate的javax.validation功能实现. 这意味着,当您让Ninja将参数注入控制器时,所有JSR303定义的注释都将在DTO对象中起作用. 您要做的就是在方法参数前面设置@ JSR303Validation批注,并通过以相同的方式注入Validation -parameter来获取验证结果.

示例性的控制器方法如下所示:

public Result postConfirmedPublication(
    @ProfileId String profileId,
    @JSR303Validation Dto dto, 
    Validation validation) {
        ...
}

在此示例中,我们希望将上下文解析为profileIdDto -object. 由于领先@ JSR303Validation -annotation所有DTO公共字段可能包含JSR303的注解是这样的:

public class Dto {
        @Pattern(regexp = "[a-z]*")
        public String regex;
        @Size(min = 5, max = 10)
        public String length;
        @Min(value = 3)
        @Max(value = 10)
        public int range;
}

您可以通过在控制器中调用validation -hasViolations ()方法来评估validation -parameter来检查验证的结果,该方法为truefalse . 您可以使用getViolations()方法检查Dto中哪个字段导致违规,该方法为您提供Dto中所有发生的违规的完整列表.

基于JSR303的验证是一种通用方法,可让您检查已提交对象的有效性. 这些对象可以通过HTTP表单提交,JSON或XML发送到您的应用程序. 唯一重要的部分是您的DTO对象包含Ninja可以评估的有效JSR303验证注释.

唯一重要的部分是您的DTO对象包含Ninja可以评估的有效JSR303验证注释.

如果您想验证嵌套的DTO或更详细的信息,请访问以下网站: JBOSS Validation API

Validation messages

如果您将Freemarker用作模板引擎(默认情况下),则验证对象将在模板内部自动可用. 然后,您将能够检查某个动作是否产生了某些验证错误. 您可以将每种违规行为从getViolation()方法传递给i18n方法,以进行翻译. 您要么在消息属性中定义了相应的键,要么将使用默认消息,并在当前请求区域设置内插(转换错误除外).

<#list validation.violations as violation>
   ${i18n(violation)}
</#list>

by  ICOPY.SITE