美文网首页
handling exceptions

handling exceptions

作者: cdz620 | 来源:发表于2020-03-05 10:21 被阅读0次

    controller中处理异常的方式

    • 常见的 Spring exceptions 异常自动转化成对应的http code
    • @ResponseStatus 定义异常时指定返回的http code
    • @ExceptionHandler 指定异常类型调用的方法
    • @ControllerAdvice 处理所有controller的异常

    spring exceptions 异常自动转化

    • 一般不用,可以忽略
    Spring exception HTTP status code
    BindException 400 - Bad Request
    ConversionNotSupportedException 500 - Internal Server Error
    HttpMediaTypeNotAcceptableException 406 - Not Acceptable
    HttpMediaTypeNotSupportedException 415 - Unsupported Media Type
    HttpMessageNotReadableException 400 - Bad Request
    HttpMessageNotWritableException 500 - Internal Server Error
    HttpRequestMethodNotSupportedException 405 - Method Not Allowed
    MethodArgumentNotValidException 400 - Bad Request
    MissingServletRequestParameterException 400 - Bad Request
    MissingServletRequestPartException 400 - Bad Request
    NoSuchRequestHandlingMethodException 404 - Not Found
    TypeMismatchException 400 - Bad Request
    • 使用姿势:在controller中抛出错误,下面的日子返回500 错误
    package spittr.web;
    // 定义异常类型
    public class SpittleNotFoundException extends RuntimeException {
    }
    
    @RequestMapping(value="/{spittleId}", method=RequestMethod.GET)
    public String spittle(
        @PathVariable("spittleId") long spittleId,
        Model model) {
      Spittle spittle = spittleRepository.findOne(spittleId);
      if (spittle == null) {
        throw new SpittleNotFoundException();
      }
      model.addAttribute(spittle);
      return "spittle";
    }
    

    @ResponseStatus

    在定义异常时,指定返回的http code

    package spittr.web;
    import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.ResponseStatus;
    @ResponseStatus(value=HttpStatus.NOT_FOUND,
                    reason="Spittle Not Found")
    public class SpittleNotFoundException extends RuntimeException {
    }
    

    @ExceptionHandler 处理指定的异常类型

    @ExceptionHandler(DuplicateSpittleException.class)
    public String handleDuplicateSpittle() {
      return "error/duplicate";
    }
    

    @ControllerAdvice 处理所有controller的异常

    • @ControllerAdvice 也是@Conponent会被spring加载
    • 处理的方法,实现跟@RequestMapping处理相同
    package spitter.web;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    @ControllerAdvice
    public class AppWideExceptionHandler {
      @ExceptionHandler(DuplicateSpittleException.class)
      public String duplicateSpittleHandler() {
        return "error/duplicate";
      }
    }
    

    相关文章

      网友评论

          本文标题:handling exceptions

          本文链接:https://www.haomeiwen.com/subject/jrdjchtx.html