Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以从单个位置处理异常_Java_Spring_Exception_Spring Mvc_Exception Handling - Fatal编程技术网

Java 是否可以从单个位置处理异常

Java 是否可以从单个位置处理异常,java,spring,exception,spring-mvc,exception-handling,Java,Spring,Exception,Spring Mvc,Exception Handling,我在SpringMVC应用程序中有dao、服务和操作类。 我在Dao和服务类中抛出异常。现在在实际操作中,通常我必须编写try-catch块,若dao和服务中发生异常,它将从那个里抛出,并在实际操作中进入catch块 我将显示一个错误jsp 问题是我需要在所有动作方法中编写相同的catch块 是否有可能在action方法中再次抛出它,并从一个点处理它,而不是到处编写相同的代码 请建议。我认为您正在寻找横切异常处理和好消息,您正在使用Spring MVC是的,您可以使用此功能 您只需将服务中的cu

我在SpringMVC应用程序中有dao、服务和操作类。 我在Dao和服务类中抛出异常。现在在实际操作中,通常我必须编写try-catch块,若dao和服务中发生异常,它将从那个里抛出,并在实际操作中进入catch块

我将显示一个错误jsp

问题是我需要在所有动作方法中编写相同的catch块

是否有可能在action方法中再次抛出它,并从一个点处理它,而不是到处编写相同的代码


请建议。

我认为您正在寻找横切异常处理和好消息,您正在使用Spring MVC是的,您可以使用此功能

您只需将服务中的
customExceptions
或任何其他
异常
抛出到操作方法

假设这是您的服务:

@Service
public class MyService {
  public void someMethod throws RuntimeException {
  ...
  }
}
在控制器方法中:

@Controller
public class MyController {
  @Autowired
  MyService service;

  @RequestMapping("/someuri"){
    try {
      service.someMethod();
    } catch {
      throw new RuntimeException();
    }
  }

  @ExceptionHandler(RuntimeException.class)
  public ModelAndView handleException(RuntimeException ex) {
    ModelAndView model = new ModelAndView("errorpage");
    return model;
  }
}

ExceptionHandler
注释的
handleException
方法是异常处理的建议方法,它将在控制器内抛出
RuntimeException
时被调用,您可以像这样处理所有其他异常。

您还可以看看
Spring集成
。它提供了网关、过滤器和通道的使用。每个都可以分配一个请求、响应和错误通道。甚至还有一个默认的错误处理程序。如果所有数据都流经特定通道,则使用自定义错误处理程序如下所示:

@MessageEndpoint
public class MyErrorHandler {
    @ServiceActivator(inputChannel = "errorChannel")
    public String handle(String messsage) {
       // do whatever you like
    }
}

集成框架为一般处理提供了很多有用的东西。

动作类是Spring MVC控制器吗?可能有助于取消选中您的异常(扩展
RuntimeException
),并且您不需要所有这些try-catch使代码混乱(我打赌它们在catch块中除了log和/或throw之外没有做任何有用的事情)