springboot-异常处理与单元测试

一、自定义错误页面

springBoot默认的处异常的机制:SpringBoot默认的已经提供了一套处理异常的机制。一旦程序中出现了异常SpringBoot会像/error的url发送请求。在springboot中提供了一个叫BasicExceptionController来处理/error请求,然后跳转到默认显示异常的页面来展示异常信息。
如果我们需要将所有的异常同一跳转到自定义的错误页面,需要在src/main/resources/templates目录下创建errror.html(一定要是这个名字)

二、@ExceptionHandler注解处理异常(只能在本controller中使用)

@Controller
public class NewErrorController {
    
    
    @ExceptionHandler(value= {java.lang.ArithmeticException.class})
    public ModelAndView arithmeticExceptionHandler(Exception e) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("error", e.toString());
        mv.setViewName("error");
        return mv;
    }
}

三、@ControllerAdvice+@ExceptionHander注解处理异常

需要创建一个能够处理异常的全局异常类。在该类上添加@ControllerAdvice注解

四、配置SimpleMappingExceptionResolver处理异常(无法传递错误信息,只做映射)

@Configuration
public class GlobalException {

    @Bean
    public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver() {
        
        SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
        
        Properties mappings = new Properties();
        /**
         * 参数一:异常的类型,注意必须是异常类型的全名
         * 参数二:视图名称
         */
        mappings.put("java.lang.ArithmeticException", "ok");
        
        //设置异常与视图映射信息
        resolver.setExceptionMappings(mappings);
        return resolver;
    }
}

五、自定义HandlerExceptionResolver类处理异常

在全局异常处理类中实现HandleExceptionResolver接口

@Configuration
public class GlobalException implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
            Exception ex) {
        ModelAndView mv = new ModelAndView();
        //判断不同异常类型,做不同视图跳转
        if(ex instanceof ArithmeticException) {
            mv.setViewName("ok");
        }
        //比第四种多了
        mv.addObject("error", ex.toString());
        return null;
    }

}

junit单元测试

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes= {App.class})
public class UserServiceTest {
    
}

@RunWith:启动器
SpringJUnit4ClassRunner.class,让junit与spring环境进行整合

@SpringBootTest(classes= {App.class}) 1.当前类为springBoot的测试类
@SpringBootTest(classes= {App.class}) 2.加载SpringBoot启动类,启动SpringBoot

热部署:

spring-boot-devtools
通常会在配置加true,如果有项目继承这个项目,不会往下传递。

你可能感兴趣的:(springboot-异常处理与单元测试)