[英]Spring MVC validation: minimum one field required. At least one field required
我使用DTO實體按條件進行搜索,以在我的應用程序前端進行過濾 :
public class MyFilter implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
@Enumerated(EnumType.STRING)
private AccessType accessType;
private List<MyType> userType;
private List<OfficeLocation> officeLocation;
private List<Language> languages;
private String country;
}
和吸氣劑和二傳手。
在我的控制器中 :
@RequestMapping
public ModelAndView list(@ModelAttribute("filter") MyFilter myFilter, BindingResult result) {
final ModelAndView mav = new ModelAndView("list");
// validate
MyFilterValidator.validate(myFilter, result);
mav.addObject("filter", myFilter);
if (result.hasErrors()) {
return mav;
}
// ...
return mav;
}
我想通過一個驗證器類來驗證搜索表單過濾器 :
公共類MyFilterValidator實現org.springframework.validation.Validator {
@Override
public void validate(Object object, Errors errors) {
final MyFilter myFilter = (MyFilter) object;
if (myFilter == null) {
errors.reject("error.one.field.required");
} else {
if (StringUtils.isEmpty(myFilter.getName()) && myFilter.getAccessType() == null
&& myFilter.getUserType() == null && myFilter.getLanguages() == null
&& StringUtils.isEmpty(myFilter.getCountry())
&& myFilter.getOfficeLocation() == null) {
errors.reject("error.one.field.required");
}
}
}
@Override
public boolean supports(Class inClass) {
return MyFilter.class.equals(inClass);
}
}
我需要驗證是否填充了一個字段,是否填充了我的Filter類的至少一個字段。 我該如何簡單地做到這一點? 我需要檢查每個屬性:StringUtils.isEmpty或.size()<= 0,...? 是否可以遍歷每個屬性並檢查其中一個屬性是否不為null? 要知道是否填寫了一個字段?
如果您經常需要此測試,則有必要實現一個小的功能,該功能通過反射檢查DAO的一些帶注釋的字段。
public DAO {
public String nevermind;
@AtLeastOneOfThem
public String a;
@AtLeastOneOfThem
public String b;
}
/**
* Return True if at least on of the fields annotated by @AtLeastOneOfThem
* is not Empty.
* THIS IS PSEUDO CODE!
*/
public static boolean atLeastOneOfThemIsNotEmpty(Object o) {
for(Field field : getFieldsAnnotatedWith(AtLeastOneOfThem.class, o) {
if (field.get() != null && !field.get().empty()) {
return true;
}
}
return false;
}
如果這項工作太多,那么這將是傳統的手寫方式實施支票的快捷方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.