SpringMVC处理自定义异常,经过读取配置文件把错误信息显示在前台页面

首先引入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版)》

相关文章
相关标签/搜索