在Spring MVC中抛出CustomException代替ParseException

时间:2018-03-05 13:56:56

标签: java spring-mvc exception-handling

我正在尝试使用两种格式将字符串转换为Date。但是当DateString与这两种格式中的任何一种都不匹配时,它会抛出ParseException。我在ServiceImpl中捕获此异常,一切都很好。但现在,我想向用户展示一些关于其格式不正确的信息 问题:我正在使用ParseException的catch块来抛出我的customException,我知道这是一个不好的做法。我该怎么做才能避免这种情况。

ServiceImpl.java

try {
        CommonUtils.convertStringToDate(fooBean.getDateString());
    } catch (ParseException e) {
        throw new DateParseException("Problems with your date.");
    }

GlobalExceptionHandler.java

@ExceptionHandler(DateParseException.class)
public String handleParseException(HttpServletRequest request, Exception ex, String msg){
    logger.error("DateParseException Occured :: "+ex.getMessage());
    ModelAndView model = new ModelAndView();
    model.addObject("message", msg);
    return "error";
}

CommonUtils.java

public static Date convertStringToDate(String dateString) throws ParseException{
        DateFormat dateFormat1 = new SimpleDateFormat(Constants.USDATEFORMAT1);
        DateFormat dateFormat2 = new SimpleDateFormat(Constants.USDATEFORMAT2);
        DateFormat dateFormat3 = new SimpleDateFormat(Constants.USDATEFORMAT3);
        DateFormat dateFormat4 = new SimpleDateFormat(Constants.USDATEFORMAT4);
        boolean hyphenDelimeter = dateString.contains("-");
        boolean slashDelimeter = dateString.contains("/");
        int length = dateString.length();
        Date date = null;
        if(slashDelimeter){
            if(length == 10){
                    date = dateFormat1.parse(dateString);
            }else if(length == 8){
                    date = dateFormat2.parse(dateString);
            }
        }else if(hyphenDelimeter){
            if(length == 10){
                    date = dateFormat3.parse(dateString);
            }else if(length == 8){
                    date = dateFormat4.parse(dateString);
            }
        }
        return date;
    }

1 个答案:

答案 0 :(得分:0)

调整你的异常以包含"导致异常"一个并将捕获的异常包装在自定义异常中,如下所示:

...
} catch (final ParseException e) {
  throw new DateParseException("Problems with your date.", e);
}

或者向您抛出的异常中添加更相关的错误消息:

...
} catch (final ParseException e) {
  throw new DateParseException("Date could not be parsed.");
}

我会做前者来保留堆栈跟踪,这样你就可以更详细地了解出现了什么问题。