java - 如何验证列表> 因为不空?
问题描述
我的实体中有一个List<List<String>>
字段。在某些时候,我会为此添加一个新字符串。
我尝试创建自定义注释,但由于某种原因,当我尝试提交表单时它会触发错误。
我的注释(我List<String>
在这里找到并修改了一个):
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NotEmptyFieldsValidator.class)
public @interface NotEmptyFields {
String message() default "List cannot contain empty fields";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
我的验证器:
public class NotEmptyFieldsValidator implements ConstraintValidator<NotEmptyFields, List<List<String>>> {
@Override
public void initialize(NotEmptyFields notEmptyFields) {
}
@Override
public boolean isValid(List<List<String>> lists, ConstraintValidatorContext context) {
List<String> objects = lists.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
return objects.stream().allMatch(nef -> nef != null && !nef.trim().isEmpty());
}
}
我的控制器部分:
@RequestMapping(value = "/insert", method = { RequestMethod.POST })
public ModelAndView insert(@ModelAttribute("sprav") @Valid Spravochnik sprav, ModelMap model, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
model.addAttribute("sprav", sprav);
return new ModelAndView("insert", model);
}
if(spravochnikService.ins(sprav.getTableName(), sprav) == true) {
model.addAttribute("tableName", sprav.getTableName());
model.addAttribute("id", sprav.getId());
return new ModelAndView("redirect:/spravochnik/list/{tableName}", model);
}
else {
return new ModelAndView("error", model);
}
}
Spravochink 是具有这个复杂领域的结构。看起来像:
public class Spravochnik extends BaseEntity {
private String tableName;
private List<String> columnName;
@NotEmptyFields
private List<List<String>> valuesInRows;
public Spravochnik() {
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public List<String> getColumnName() {
return columnName;
}
public void setColumnName(List<String> columnName) {
this.columnName = columnName;
}
public List<List<String>> getValuesInRows() {
return valuesInRows;
}
public void setValuesInRows(List<List<String>> valuesInRows) {
this.valuesInRows = valuesInRows;
}
解决方案
推荐阅读
- google-apps-script - 不隐藏基于特定单元格的所有空行
- python - 如何在 Microsoft Azure Functions 中重新启动 Python 运行时
- c++ - 如何在不浪费电流的情况下使用下拉电阻让 SPI SCK 线空闲到低电平?
- reactjs - React Store 不使用 React.useReducer 更新上下文
- azure - 在 Azure 管道的 NuGet 包操作中使用自定义环境变量
- javascript - 循环和使用document.write时如何在点击时发送唯一ID
- ruby-on-rails - react-rails heroku 图像/视频未显示
- java - 使用 AssertJ 比较 Java 中的 2 个 csv
- php - 创建新产品 Laravel 时将图像附加到产品变体
- visual-studio-code - Fira代码字体卡在vscode的粗体上,如何解决?