带有对象列表的 Grails 自定义验证

Posted

技术标签:

【中文标题】带有对象列表的 Grails 自定义验证【英文标题】:Grails Custom Validation with List of objects 【发布时间】:2018-11-24 18:54:55 【问题描述】:

我已经对 MultipartFile 进行了自定义验证。

class ImageCommand implements Validateable 
MultipartFile imageFile

static constraints = 
    imageFile  validator:  val, obj ->
        if ( val == null ) 
            return false
        
        if ( val.empty ) 
            return false
        

        ['jpeg', 'jpg', 'png'].any  extension ->
            val.originalFilename?.toLowerCase()?.endsWith(extension)
        
    

但我现在需要多个文件,我想更改自定义验证以获取列表并应用约束。

<input type="file" id="imageFile1" name="imageFile">
to
<input type="file" id="imageFile1" name="imageFiles">
<input type="file" id="imageFile2" name="imageFiles">

知道如何在自定义验证中使用集合吗???

【问题讨论】:

【参考方案1】:

如果输入名称相同,您将获得List&lt;MultipartFile&gt; imageFiles。 所以你必须调整你的验证器以使用列表:

static constraints = 
    imageFiles validator:  val, obj ->
        val && val.every  imgFile ->
            if ( imgFile == null ) 
                return false
            
            if ( imgFile.empty ) 
                return false
            

            ['jpeg', 'jpg', 'png'].any  extension ->
                imgFile.originalFilename?.toLowerCase()?.endsWith(extension)
            
        
    

【讨论】:

通过将物理 1 imageFile 声明更改为该 bean 中的列表 List&lt;MultipartFile&gt; imageFile=[]。由于您的 gsp 正在发送多个相同的项目,但您在验证 bean 中收到了 1 个图像

以上是关于带有对象列表的 Grails 自定义验证的主要内容,如果未能解决你的问题,请参考以下文章

Grails:Spring Security Core 自定义身份验证 getUserByUserName 返回 null 对象

Grails spring security如何在自定义身份验证中记住我?

Grails:如何使用命令对象验证由项目列表组成的 POST 正文?

如何处理 grails spring-security-rest 插件中的自定义身份验证异常?

Grails - Acegi:自定义身份验证方法

Grails 3.2.4:未调用自定义身份验证过滤器