Struts2中的异常处理

oval 定义

oval 是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件、Annotation、POJOs 进行设定。

DMP中使用到的oval验证

1、Length(max = 1, min = 10):长度验证,min表示最小长度,max表示最大长度
2、NotNull:非空验证
3、NotEmpty:非空字符串验证
4、ValidateWithMethod(methodName = "methodName", parameterType = ):自定义验证,methodName表示验证方法,parameterType表示验证的属性的类型
注:
1、DMP中的oval是通过注解进行设定的
2、oval所有验证规则中都有一个message属性,可以用来覆盖oval自带的验证信息
3、所有的的oval验证均出现在DTO对象的属性中
4、所有的DTO对象继承BaseDTO。BaseDTO中实现公共的自定义验证需要的方法。用到的所有的方法如下
    // BaseDTO
    public boolean isValidType(String string)
    public boolean isValidSelfUuid(String uuid)
    public boolean isValidUuid(String uuid)
    public boolean isValidState(String state)
    public boolean isValidSprintState(String state)
    public boolean isValidReleaseState(String state)
    public boolean isValidDouble(Double digit)
    public boolean isValidDefectState(String state)
    public boolean isValidEnviroment(String enviroment)
    public boolean isValidPriority(String priority)
    public boolean isValidSeverity(String severity)

Action相关

1、BaseAction 中validate方法实现对DTO对象的验证,如果有验证不通过的,取出验证信息,保存到ValidationException中,直接抛出。(validate方法如下)
2、所有的Action类继承BaseAction,并在需要的时候调用validate方法进行对象验证。
3、验证不通过,Action类直接抛出自定义异常ValidationException(其中包含验证返回的信息)
4、ExceptionHandlingInterceptor为自定义的异常处理过滤器,用来处理action中抛出的所有异常。
// validate方法。
// BaseAction
protected void validate(Object object) throws ServerException {
    Validator validator = new Validator();
    List<ConstraintViolation> violations = validator.validate(object);
    if (violations.size() > 0) {
        StringBuilder builder = new StringBuilder();
        for (ConstraintViolation constraintViolation : violations) {
            builder.append(constraintViolation.getMessage());
        }
            throw new ValidationException(builder.toString());
    }
}

ExceptionHandlingInterceptor

1、拦截所有的请求,对action中抛出的所有异常进行处理
2、根据不同的异常类型,在重载的intercept方法中走不同的处理,并返回相应的字符串。(之后要做如果是ValidationException,打Warning级别的log
3、返回的字符串在struts.xml的全局页面中查找对应的页面
public class ExceptionHandlingInterceptor extends ExceptionMappingInterceptor {
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        // TODO
    }
}

struts.xml的配置

1、配置struts拦截器时,需要添加自定义的异常处理拦截器ExceptionHandlingInterceptor
2、每个struts.xml中的包继承于下面的exception_package
<-- struts.xml文件 -->
<package name="exception_package" extends="json-default">
    <interceptors>
        <interceptor name="oValValidation"
            class="org.apache.struts2.oval.interceptor.OValValidationInterceptor" />
        <interceptor name="exception_handling_interceptor"
            class="com.augmentum.dmp.interceptor.ExceptionHandlingInterceptor"></interceptor>
        <interceptor-stack name="dmp_default_stack">
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <interceptor-ref name="exception_handling_interceptor"></interceptor-ref>
            <interceptor-ref name="oValValidation"></interceptor-ref>
        </interceptor-stack>
    </interceptors>
    <default-interceptor-ref name="dmp_default_stack"></default-interceptor-ref>
</package>
3global-results 节点中存放所有的全局匹配页面与处理异常的ExceptionHandlingInterceptor类返回的字符串相映射
<-- struts.xml文件 -->
<global-results>
    <result name="privilege_error_exception">/WEB-INF/exception/privilegeException.jsp</result>
    <result name="struts_no_handling_exception">/WEB-INF/exception/unknowException.jsp </result>
    <result name="error">/WEB-INF/exception/unknowException.jsp</result>
    <result name="iap_error">/WEB-INF/exception/unknowException.jsp</result>
    <result name="struts_bussiness_exception">/WEB-INF/exception/businessException.jsp</result>
    <result name="struts_validation_exception">/WEB-INF/exception/validationException.jsp</result>
    <result name="struts_dataError_exception">/WEB-INF/exception/unknowException.jsp</result>
</global-results>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值