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方法进行响应。

  • 相关阅读:
    null in ABAP and nullpointer in Java
    SAP ABAP SM50事务码和Hybris Commerce的线程管理器
    Hybris service layer和SAP CRM WebClient UI架构的横向比较
    SAP ABAP和Linux系统里如何检查网络传输的数据量
    SAP CRM WebClient UI和Hybris的controller是如何被调用的
    SAP CRM和Cloud for Customer订单中的业务伙伴的自动决定机制
    SAP CRM WebClient UI和Hybris CommerceUI tag的渲染逻辑
    SAP BSP和JSP页面里UI元素的ID生成逻辑
    微信jsapi支付
    微信jsapi退款操作
  • 原文地址:https://www.cnblogs.com/zdl2234/p/12894676.html
Copyright © 2011-2022 走看看