首先引入jar包,用于读取配置资源文件:app
<!-- commons组件读取配置文件相关依赖 -->
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.8</version>
</dependency>ide
自定义异常:工具
public class DuplicateException extends RuntimeException{
private static final long serialVersionUID = 1L;
public DuplicateException() {
}
public DuplicateException(String message){
super(message);
}
}测试
利用控制器通知注解@ControllerAdvice将自定义异常集中在同一个地方处理:spa
/**
* 带有@ControllerAdvice的类中,全部带有@ExceptionHandler的方法会应用到
* 整个应用程序全部控制器中带有@RequestMapping注解的方法上
* 注解@ControllerAdvice自己已经使用了@Component注解
* @author dai
*
*/
@ControllerAdvice
public class AppWideExceptionHandler {
@ExceptionHandler(DuplicateException.class)
public String duplicateHandler(HttpServletRequest request,DuplicateException ex){
request.setAttribute("error", ex.getMessage());
return "error/duplicate";
}
}资源
控制器方法抛出自定义异常:get
@RequestMapping(value="/register",method=POST)
public String processRegistration(Spitter spitter) throws IOException{
if("test".equals(spitter.getUsername())){
throw new DuplicateException(getProperty("username.duplicate"));
}
return "redirect:/spitter/"+spitter.getUsername();
}it
此处用到的自定义错误提示,是经过读取property配置文件来得到。io
getProperty()方法是本身封装好的,以下:class
public class PropertiesUtil {
private static PropertiesConfiguration configuration = null;
public static String getProperty(String key){
try {
configuration = new PropertiesConfiguration("/spittr/props/errors.properties");
} catch (ConfigurationException e) {
e.printStackTrace();
}
return configuration.getString(key);
}
}
该工具类利用了Commons组件包,/spittr/props/errors.properties为资源文件的项目类加载路径,注意:
commons-configuration组件抛出的ConfigurationException异常引用了commons-lang-2.6.jar包,因此commons-lang jar包的版本不能过高,这里用的是2.6版本,测试能够经过。
errors.properties定义以下:
username.duplicate=用户名重复!
前台JSP相关代码:
This is an error page! <br />
error:<c:out value="${error}"></c:out>
项目运行后,在前台表单输入用户名"test",提交后跳转到错误提示页面,并显示用户名重复!
参考资料:《Spring实战(第4版)》