我有 PropertyEditor ,以便将ID转换为 Persons ,并使用setAsText(String text),如下所示:
public void setAsText(String text) throws IllegalArgumentException {
try {
int id = Integer.parseInt(text);
Person person = peopleService.get(id);
this.setValue(person);
}
catch (NumberFormatException ex) {
// ...
throw new IllegalArgumentException("Not a number!: " + text);
}
catch (PersonNotFoundExcetion ex) {
// ...
throw new IllegalArgumentException("Impossible to get Person: " + text);
}
}
我的PeopleController有一个方法如下:
@RequestMapping("/getPerson")
public void ver (@RequestParam Person person, Model model) {
model.addAttribute (person);
// ...
}
我想捕获IllegalArgumentException以向用户显示友好的消息,例如“抱歉,您正在寻找的人不在这里”,但我不知道该怎么做...
谢谢!
答案 0 :(得分:4)
可以通过以下方式进行常规异常处理:
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleAllExceptions(Exception e) {
return "redirect:/error.html"; /* use the correct view name */
}
您可以使用BindingResult
更具说明性@RequestMapping(value = "/datedata", method = RequestMethod.POST)
public String create(
@ModelAttribute("datedata") final DateData datedata,
final BindingResult result) {
if (result.hasErrors()) {
return "datedata/create";
} else {
...
return "myView";
}
}
但我想这只适用于“Forms”(ModelAttribute)
我认为让Spring处理属性编辑器对用户输入的验证并不是一个好主意。我强烈建议使用Form方式:使用STRING字段构建命令对象并在其上使用验证器。
答案 1 :(得分:1)
应该在控制器中捕获异常。它永远不会泄漏给视图和最终用户。
如果这是一个Web应用程序,我建议使用验证和绑定API而不是PropertyEditor。这将允许您返回可用于告知UI需要更正的错误。
您的异常处理需要工作。我不建议捕捉异常,除了包装和重新投掷之外什么都不做。这不是处理任何事情或添加新信息。它实际上编码的信息较少。