首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Model addAttribute处理UI中的错误

使用Model addAttribute处理UI中的错误
EN

Stack Overflow用户
提问于 2018-01-27 07:59:56
回答 1查看 362关注 0票数 0

示例示例代码

代码语言:javascript
复制
@RequestMapping(value = "/add", method = RequestMethod.POST)
public ModelAndView addEmployee(Model model, EmpTO empTO, BindingResult bindingResult){
    try {
        empService.saveOrUpdateEmployee(empTO);
    } catch (Exception e) {
        if (e instanceof InvException) {
            model.addAttribute("error", ((InvException) e).getError());
        } else {
            model.addAttribute("error", PresentationUtil.handleApplicationRuntimeError(e));
        }
        return new ModelAndView("emp/save");
    }
    empTO = new EmpTO();
    return new ModelAndView("emp/home");
}

问题:

  1. 上述做法是否正确?
  2. 我们能否将错误代码和描述存储在DB表或硬编码字符串中,并让UI处理错误代码?
  3. 这是一个标准的行业惯例吗?

Thank.s

EN

回答 1

Stack Overflow用户

发布于 2018-01-29 07:14:57

我们使用@ExceptionHandler注释,它允许我们处理Controller方法之外的异常。不需要将错误代码放入数据库表中。

异常类:

代码语言:javascript
复制
public class InvException extends RuntimeException {
    private String errorCode;
    private String errorMsg;
    //setter/getter
    ...
}

和控制器

代码语言:javascript
复制
@RequestMapping(value = "/add", method = RequestMethod.POST)
public ModelAndView addEmployee(Model model, EmpTO empTO, BindingResult bindingResult){
   ...
   } catch (InvException e) {
      throw new InvException("E400", "This is Inv Exception");
   } catch (Exception e) {
       throw new Exception(...);
   }
}

@ExceptionHandler(InvException.class)
public ModelAndView handleMyOwnException(InvException ex) {
    ModelAndView model = new ModelAndView("your specific error view");
    model.addObject("errCode", ex.getErrorCode());
    model.addObject("errMsg", ex.getErrorMsg());
    return model;
}

@ExceptionHandler(Exception.class)
public ModelAndView handleAllException(Exception ex) {
    ModelAndView model = new ModelAndView("your generic error view ");
    model.addObject("errMsg", "There is a exception");
    return model;
}

@ExceptionHandler适用于单个控制器。通过创建一个新类并用@ControllerAdvice对其进行注释,可以将其应用于所有控制器。

代码语言:javascript
复制
@ControllerAdvice
public class GlobalExceptionController {
    @ExceptionHandler(InvException.class)
    public ModelAndView handleMyOwnException(InvException ex) {...}
    @ExceptionHandler(Exception.class)
    public ModelAndView handleAllException(Exception ex) {...}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48473824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档