使用模型属性spring MVC重定向控制器建议expectionhandler

时间:2016-05-27 12:32:20

标签: spring spring-mvc thymeleaf

所以我尝试从ExceptionHandler wit model属性重定向到导致它的网站。

例如,我有一个控制器方法,列出当前项目:

@AvailableInMenu
@RequestMapping(method = RequestMethod.GET)
public String list(Model model) {
    model.addAttribute("Companys", iCompanyService.findAll().getData());
    return "masters/crud/company/list";
}

这是方法调用的模板:

    <div th:if="${exception != null}" class="alert alert-warning alert-dismissible" role="alert">
        <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <strong>Warning!</strong><div th:text="${exception}" th:remove="tag" ></div>
    </div>

    <div class="ibox float-e-margins">
        <div class="ibox-content">
            <table id="table" class="table table-striped table-bordered nowrap">
                <thead>
                    <tr>
                      <th th:text="#{app.maintanance.installversion}"></th>
                    </tr>
                </thead>
                <tbody>
                    <tr th:each="company : ${Companys}">
                        <td th:text="${company.installversion}"></td>
                        <td>
                            <a class="delete-button" th:attr="data-redir=@{/company/delete/{id}(id = ${company.id})}">
                                <i class="fa fa-pencil"></i>
                            </a>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>

此百万美元代码生成一个包含数据和删除链接的表。用户使用的实体wotch具有外键,如果用户想要删除它,jpa会产生一个外键约束,我将其包装到错误包装​​器中。

这是删除链接的控制器方法:

@RequestMapping(value = {"/delete/{id}"}, method = RequestMethod.GET)
public String deleteCompany(Model model, @PathVariable("id") Long id) {
    ErrorWrapper<Boolean> result = iCompanyService.deleteCompany(id);
    if(result.hasError()){
        if(result.getConstraint()){
            throw new GlobalModelException(601L, "redirect:/company");
        }
    }
    return "redirect:/company";
} 

你可以看到是否有错误我抛出了我创建的一般异常,而一个带有ExpectonHandler的ControllerAdvice在哪里捕获我的预期类。我想将异常添加到模型并重定向回列表站点,并向站点上显示引导警报。 这是来自ControllerAdvice的exceptionHandler

@ExceptionHandler(GlobalModelException.class)
public ModelAndView handlingException(GlobalModelException exception) {
    ModelAndView model = new ModelAndView();
    model.setViewName(exception.getUrl());
    model.addObject("exception", exception);
    return model;
}

ModelAndView将应用程序重定向到正确的位置,但重定向后异常为null。如何使用ControllerADvice在模型中调用我的列表网站。我还有许多其他的例外情况,我想要处理这个例子以及其他很多我需要的控制器。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)