jsr 303 验证对象中的所有字段
jsr 303 validated all fields in object
假设我有两个视图文件 (jsp
s) 和一个 class(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
}
在一个视图文件中我想验证 startDate
和 endDate
在其他视图文件中,我想使用 json ajax 验证 demandOriginalDate
和 demandReceiveDate
。当验证发生时,我收到所有字段的验证消息,代码如下:
控制器class的方法这是两个视图文件(jsp
s)
使用的测试代码
@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 文件 这是两个视图文件 (jsp
s) 使用的测试代码下面的代码是 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);
}
问题为什么我收到所有字段的验证消息
这就是groups
发生的情况。这是关于 them.
的一个很好的教程
您需要更改的第一件事是将组属性添加到您的 @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;
}
假设我有两个视图文件 (jsp
s) 和一个 class(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
}
在一个视图文件中我想验证 startDate
和 endDate
在其他视图文件中,我想使用 json ajax 验证 demandOriginalDate
和 demandReceiveDate
。当验证发生时,我收到所有字段的验证消息,代码如下:
控制器class的方法这是两个视图文件(jsp
s)
@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 文件 这是两个视图文件 (jsp
s) 使用的测试代码下面的代码是 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);
}
问题为什么我收到所有字段的验证消息
这就是groups
发生的情况。这是关于 them.
您需要更改的第一件事是将组属性添加到您的 @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;
}