我使用的是spring framework 3.0.5。
我有一个表格:
Category:
Title:
Short Description:
Body:
而一个域的类入口:
public class Entry {
private int id;
private int category;
private String title;
private String shortDesc;
private String body;
private Date date;
//getters and setters
}和一个控制器:
@RequestMapping(value="/entryPost",method=RequestMethod.POST)
public String entryPost(@ModelAttribute("postedEntry") Entry entry,BindingResult result){
entryValidator.validate(entry, result);
if(result.hasErrors()){
return "entryPost";
}else{
rusService.postEntry(entry);
return "redirect:entryPost";
}
}在我的服务对象中:
public void postEntry(final Entry entry){
String sql = "INSERT INTO entries (category,title,shortDesc,body,date) VALUES(?,?,?,?,?)";
jdbcTemplate.update(sql,new Object[]{entry.getCategory(),entry.getTitle(),entry.getShortDesc(),entry.getBody(),entry.getDate()});
}并验证者:
public class EntryValidator implements Validator{
public boolean supports(Class clazz){
return Entry.class.isAssignableFrom(clazz);
}
public void validate(Object target,Errors errors){
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "category", "required.category","Category is required!");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "title", "required.title", "Title is required!");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "shortDesc","required.shortDesc", "Short description is required!");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "body", "required.body", "Body is required!");
Entry entry = (Entry) target;
entry.setDate(new Date());
}
}如果有人发送类别的字符串值,而不是整数,则会在表单附近输入:
无法将类型java.lang.String的属性值转换为属性类别所需的类型int;嵌套异常是org.springframework.core.convert.ConversionFailedException:无法将值“h”从java.lang.String类型转换为int类型;嵌套异常是java.lang.NumberFormatException:对于输入字符串:“h”
但我不希望它输入这个。我怎样才能以某种方式验证这个值并抛出我自己的信息?
我试图在我的验证器中检查它,通过添加:
int cat = entry.getCatrgory();
if(cat.equals("0"))
errors.reject("invalid.category","The category is invalid!");但它不起作用 - 它仍然抛出了ConversionFailedException异常。