当前位置: 首页 > 知识库问答 >
问题:

无法使用Spring MVC在服务层包装DAO异常

滕渝
2023-03-14

我正在尝试使用Spring MVC处理自定义异常处理。服务层DAO层异常处理程序和服务层对异常进行包装,并由Spring MVC的控制器异常处理程序对异常进行处理。以下是我的代码:

@Override
public void saveNewMachineDetails(Machine machine, Configurations configurations) throws DataNotPersist{
logger.info("call service saveNewMachineDetails method");

try{
    machineRepository.saveAndFlush(machine);
}catch(Exception ex){
//  logger.error(ex.getMessage());
    DataNotPersist dataNotPersist =  new DataNotPersist(messageSource.getMessage("code.object.notpersist", null, null), 
            messageSource.getMessage("msg.object.notpersist", new Object[]{"Machine"}, null), ex);
    throw dataNotPersist;
}}

在上面的代码中,DAO层的异常处理在服务层,并将该异常包装在自定义异常中,然后抛出该异常。

@ControllerAdvice
public class GlobalExceptionHandler {

private Logger logger =    LoggerFactory.getLogger(GlobalExceptionHandler.class);

@ExceptionHandler(value = DataNotPersist.class)
public ModelAndView defaultExceptionHandler(HttpServletRequest request, DataNotPersist ex)throws Exception {
logger.info("In GlobalExceptionHandler");

logger.debug("********* : "+ex.getMessage());

ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("exception", ex);
modelAndView.addObject("url", request.getRequestURL());
modelAndView.setViewName("common/error");
return modelAndView;
}}

共有1个答案

范华清
2023-03-14

在服务层中,当我抛出异常时,spring回滚事务,并在视图中将我的exception包装到transactionexception中。现在,我使用exception类处理事务回滚,如下所示:

@Override
@Transactional(value="transaction_manager", rollbackFor={DataNotPersist.class})
public void saveNewMachineDetails(Machine machine, Configurations configurations) throws DataNotPersist{
    logger.info("call service saveNewMachineDetails method");

    try{
        machineRepository.saveAndFlush(machine);
    }catch(DataAccessException ex){
        logger.error(ex.getMessage());
        DataNotPersist dataNotPersist =  new DataNotPersist(messageSource.getMessage("code.object.notpersist", null, null), 
                messageSource.getMessage("msg.object.notpersist", new Object[]{"Machine"}, null), ex);
        throw dataNotPersist;
    }}
 类似资料:
  • 问题内容: 如果我的Dao层抛出了Dao特定的异常,那么在我的服务层中对它们的处理是否会引起关注的泄漏?如果是,那么我应该使异常通用且独立于任何层来解决它,还是有其他方法吗? 相同的问题适用于服务层引发的UI层处理异常。 问题答案: 当我们创建一个分层的应用程序时,总是有一个用户层和另一个使用过的层。对于这种情况,UI层->使用服务层->使用DAO层。 现在,它非常主观并且易于解释。但目标应该是

  • 问题内容: 我目前正在使用带有Spring插件和hibernate的Struts2开发一个Web应用程序,并且在查看在线示例时,我看到了Service和DAO层的使用,现在才知道Service和数据访问对象层的真正用途是什么?如果服务层只是在调用DAO层的方法来执行CRUD操作。直接调用DAO层方法不明智吗? 假设此示例为Dao和Service Layer 人员服务 人道 我的问题是,如果仅将服务

  • 在我的示例中,我有一个Hibernate实体和一个DAO。 当我以这种方式使用DAO时 数据库中只保存了一行(Action2)。当我删除注释时,两行(Action1和Action2)都被保存(这是我需要的行为)。我的问题是服务层上的事务注释如何影响事务(方法executeTransaction())的执行。为什么没有服务层上的事务性注释,这两行都保存在数据库中,而只有最后一行与此注释一起保存?

  • 假设我有类和。 班级帐户 班级付款 DAO层有实现CRUD方法的和类。下一个是服务层,它有和类,它们在DAO类之上执行其他操作。 因为我使用的是货币/货币,所以我使用的是交易。我在我的DAO课程中使用它们。 我的类有一个方法,该方法为每个特定的DaoFactory(例如)返回一个连接对象,该对象使用 中实现这个场景时,它是实现事务的正确方式吗?

  • 问题内容: 首先,可能是我要问一些以前已经问过并回答过的问题,但我却无法找回搜索结果。一般而言(或到目前为止):)我们在服务层上定义事务注释,通常是Spring Hibernate Crud。 现在,我需要根据客户站点在域模型之间进行选择。假设客户端A使用我的域模型都很好,但是另一个客户端网站会给我一个Web服务而不是使用我们的域模型。 我应该替换哪一层。我认为必须是DAO,它将从Web服务获取我

  • 问题内容: 嗨,我正在尝试使用mono-service2从Visual Studio中运行库存Windows Service Project。我在单声道2.0的debian上运行它并进行编译。 我尝试从这里开始(我尝试将-d设置为应用程序的目录,并设置了-n,-m) 唯一的代码更改是添加测试写行 Service1.cs 结果就是这个错误 谢谢你的帮助 回答 我缺少LD_LIBRARY_PATH e