zoukankan      html  css  js  c++  java
  • Spring MVC异常处理

    在一个系统开发中,总会出现异常,如果这个异常可以处理就会在处理逻辑加上对异常的处理,如果无法处理就可能需要跳转到我们写好的一个友善的错误页面。不管这样都是要进行响应的。

    下面介绍在开发中出现异常的几种处理方式:

    将异常映射为http状态码

    spring中的一些异常会默认映射http状态码

    在出现上面的异常时,spring会根据默认的映射规则响应。但如果出现的是我们自定义的异常,那spring是不知道该如果映射的,这时我们可以通过@ResponseStatus注解给我们自定义的异常添加映射规则。

    @ResponseStatus(value=HttpStatus.NOT_FOUND,reason="SPittle Not Found")
    public class SpittleNotFoundException extends RuntimeException{
    }
    

    在上面的例子中,SpittleNotFoundExcaption是我们自定义的异常,通过注解@ResponseStatus(value=HttpStatus.NOT_FOUND,reason="SPittle Not Found"),我们就将这个注解映射为404状态了,当在controller中出现这个异常,我们没有进行处理,就会对用户返回一个404的响应。

    编写异常处理方法

    1,在处理请求的方法中直接处理异常

    @RequestMapping("/login")
        public String saveSpittle(SpittleForm form, Model model){
            try {
                spittleRepository.save(form);
            }catch (DuplicateSpittleException e){
                return "error/duplicate";
            }
        }
    

    2,在上面的处理方法如果只是处理一次这个异常当然没问题,但是如果controller中多处都出现这个异常,那每次都编写一次处理逻辑就会很麻烦,所以spring提供了@ExceptionHandler这个注解,通过这个注解可以编写一次异常处理应用到同一个controller的所有同样的异常处理中。

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

    只要在controller中添加上面这个方法,就可以对controller中所有的DuplicateSpittleException异常进行处理。

    3,在上面的方法中可以对某个contrller的某个异常进行处理,但是在开发中还会出现这样的情况,不同的controller中也可能出现一样的异常,所有spring还提供给控制器添加通知的注解@ControllerAdvice。

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

    在编写上面的类后,所有的controller出现的所有DuplicateSpittleException异常都会通过duplicateSpittleHandler方法进行响应。

  • 相关阅读:
    Javascript
    CSS3新增特性HTML标签类型
    HTML5新增的标签
    prototype __proto__ Function
    oninput
    extend
    hasOwnProperty()
    this prototype constructor
    Array类型判断
    指针
  • 原文地址:https://www.cnblogs.com/zdl2234/p/12894676.html
Copyright © 2011-2022 走看看