【问题标题】:jsr 303 validated all fields in objectjsr 303 验证对象中的所有字段
【发布时间】:2016-02-25 11:44:39
【问题描述】:

假设我有两个视图文件(jsps)和一个类(BudgetControlRegisterDto

BudgetControlRegisterDto

public class BudgetControlRegisterDto implements Serializable {
@NotNull(message = "{NotNull.java.util.Date}")
    private Date demandReceiveDate;

@NotNull(message = "{NotNull.java.util.Date}")
    private Date demandOriginalDate;

@NotNull(message = "Start date {NotNull.java.util.Date}")
    private Date startDate;
@NotNull(message = "End date {NotNull.java.util.Date}")
    private Date endDate;


// setter and getter 
}

在一个视图文件中,我想验证 startDateendDate 在其他视图文件中,我想使用 json ajax 验证 demandOriginalDatedemandReceiveDate。当验证发生时,我会使用以下代码获得所有字段的验证消息:

控制器类的方法这是测试两个视图文件使用的代码(jsps)

@RequestMapping(value = "/addnewdemand.json", method = RequestMethod.POST)
    public @ResponseBody BudgetControlRegisterDto addNewDemand(@Valid @ModelAttribute("bcrDto") BudgetControlRegisterDto bcrDto,Errors errors){
    log.info("addNewDemand invoked!");
        if(errors.hasErrors()) {
            log.info("has errors");
            bcrDto.setFieldsErrors(errors.getFieldErrors());
            return bcrDto;
        }


    return bcrDto;
    }

.js 文件这是两个视图文件(jsps)使用的测试代码,下面的代码是 ajax 响应代码

if(response.fieldsErrors != null) {
    html ='<div class="ui-message-error">';
    for(var i= 0; i<response.fieldsErrors.length; i++) {
        html+='<span>'+response.fieldsErrors[i].defaultMessage+'</span><br/>';
    }
    html+='</div>';
    $("#bcrForm_message").html(html);
}

问题为什么我会收到所有字段的验证消息

【问题讨论】:

    标签: json spring-mvc bean-validation jsr


    【解决方案1】:

    这是groups 发生的情况。这是一个关于them的好教程。

    您需要更改的第一件事是将groups 属性添加到您的@NotNull 注释中。

    public class BudgetControlRegisterDto implements Serializable {
    @NotNull(message = "{NotNull.java.util.Date}",groups={First.class})
        private Date demandReceiveDate;
    
    @NotNull(message = "{NotNull.java.util.Date}",groups={First.class})
        private Date demandOriginalDate;
    
    @NotNull(message = "Start date {NotNull.java.util.Date}",groups={Second.class})
        private Date startDate;
    @NotNull(message = "End date {NotNull.java.util.Date}",groups={Second.class})
        private Date endDate;
    
    
    public interface First {};
    public interface Second {};
    
    // setter and getter 
    }
    

    第二个是从@Valid 更改为@Validated,因为@Valid 不支持验证组。

    控制器的方法:

    @RequestMapping(value = "/addnewdemand.json", method = RequestMethod.POST)
        public @ResponseBody BudgetControlRegisterDto addNewDemand(@Validated(BudgetControlRegisterDto.First.class) @ModelAttribute("bcrDto") BudgetControlRegisterDto bcrDto,Errors errors){
        log.info("addNewDemand invoked!");
            if(errors.hasErrors()) {
                log.info("has errors");
                bcrDto.setFieldsErrors(errors.getFieldErrors());
                return bcrDto;
            }
    
    
        return bcrDto;
        }
    

    【讨论】:

      猜你喜欢
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 2011-10-30
      • 2018-08-15
      • 1970-01-01
      • 2011-07-24
      相关资源
      最近更新 更多