如何减少在多个地方使用的相同异常捕获操作的重复代码?

rav*_*i_s 8 java spring-mvc

要使用多种方法,我必须多次使用相同的检查异常catch(请参阅Java:checked vs uncheckedexception解释)。结果是重复的代码行。我想要某种减少重复异常的方法,catch以减少代码行数。

什么是减少重复catch节的数量并减少代码行的好方法?有什么方法可以catch在另一个文件中写入该操作并明确使用它?

基本上,我想减少行数,并使代码更简洁,更易于阅读。

这是我的代码示例:

@RequestMapping(value="")
public @ResponseBody Response addMultiple(){
if() {
    try {
        data = new weight();

    } 
    catch( AmazonServiceException se ){
        response = x;
    }
    catch (AmazonClientException ce) {
        response = y;
    }
    catch(JsonProcessingException je) {
        response = z;
    }
}


@RequestMapping(value="")
public @ResponseBody Response addMultiple2(){
if() {
    try {
        data = new height();

    } 
    catch( AmazonServiceException se ){
        response = x;
    }
    catch (AmazonClientException ce) {
        response = y;
    }
    catch(JsonProcessingException je) {
        response = z;
    }
}

@RequestMapping(value="")
public @ResponseBody Response addMultiple3(){
if() {
    try {
        data = new age();

    } 
    catch( AmazonServiceException se ){
        response = x;
    }
    catch (AmazonClientException ce) {
        response = y;
    }
    catch(JsonProcessingException je) {
        response = z;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想一次声明该异常捕获操作,并想多次调用它。

我正在使用Spring框架。

Sar*_*ana 1

如果你想处理这些异常并采取一些操作,你可以在 Spring 中编写一个自定义异常处理程序,如果发生任何异常,处理程序将执行,你也可以省略这些try-catch块。

@ExceptionHandler({ Exception.class }) //narrow it to the exception you need
    public ModelAndView globalExceptionHandler(Exception e) {
        return new ModelAndView("error");
    }
Run Code Online (Sandbox Code Playgroud)

否则,在您的方法中捕获Exception并编写一个处理程序方法来在 catch 块中处理它。

更改 catch 块

catch( Exception e ){
    handleException(e);
}
Run Code Online (Sandbox Code Playgroud)

和下面的处理程序

private Response handleException(Exception e){
    if(e instanceof E1){

    }else if(e instanceof E2){

    }
    .
    .
    .
    return response;
}
Run Code Online (Sandbox Code Playgroud)