首先是异常,你可以自定义异常。
首先写一个实体类类,让他继承异常,你可以在里面写类型。记得写构造方法和有参无参。
public class MyException extends Exception{ private String code; private String msg;
再写一个全局异常处理。这里面的内容就是这,json的是处理当前程序异常,另一个是处理业务异常。@ExceptionHandler是异常的注解,@RestControllerAdvice通知注解
//通知 @RestControllerAdvice public class GolbExceprion { /** * 以json返回异常 * @return */ @ExceptionHandler(Exception.class) public Object exception1(Exception e, HttpServletRequest request){ Map map=new HashMap(); map.put("code",500); //获取到异常信息 map.put("msg",e.getMessage()); //获取你的请求路径 map.put("url",request.getRequestURL()); return map; } /** * 以页面返回异常 * @return */ @ExceptionHandler(MyException.class) public Object exception1(MyException my,HttpServletRequest request){ ModelAndView mv=new ModelAndView(); mv.addObject("code",my.getCode()); mv.addObject("msg",my.getMsg()); mv.setViewName("erro"); return mv; } }
然后你可以写一个实体类,@Component这个注解是让折这个实体类去让spring去管理
@Component public class ExcptionInfo { private String name; private String password; 最后写一个控制器,把这个实体类属性注入进来,
//异常让他返回的是json形式的异常 @GetMapping(value = "/textexc") @ResponseBody public ExcptionInfo Text1(){ int i=1/0; return excptionInfo; } //自定义异常 @GetMapping(value = "/textexc2") public ExcptionInfo Text2() throws MyException { throw new MyException("500","没有钱了"); }
---------------------------------------------------------------------------------------------------------------------------------拦截器,这里面使用登录来演示了,这个登录的页面,我是写在了static里面,直接就能访问
首先创建一个全局拦截器的类,让他继承这个HandlerInterceptor,然后使用它里面的三个方法,在把这个类上面配置一个注解,@Component,把他交给Springboot来管理,省的接下来new这个类。
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("执行业务逻辑之前执行"); //拿到前台输入框的值 String username = request.getParameter("username"); if(username!=null){ //如果不为空的话就继续执行 return true; }else{ //如果为空的话就重定向到登陆界面, response.sendRedirect("login.html"); return false; } } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("执行业务逻辑后,视图渲染前执行"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("视图渲染后执行"); }
因为SSM中的拦截器都是配置在Springmvc里面的,Springboot里面没有Springmvc,这次的拦截器的配置文件卸载类里面,接下来要写一个类,让他继承这个拦截器的接口 WebMvcConfigurer。因为这个类是要配置拦截器的,所以要加上一个拦截器的注解@Configuration。做完这些,开始配置拦截什么,
在这里你要实现一个WebMVcConfigurer里面的一个方法,在这个方法里面写拦截什么,在这个方法里面,就用到了。上面写的交给Springboot管理全局拦截器的类,把他注入进去
public void addInterceptors(InterceptorRegistry registry) {}
@Configuration public class GolbExcecepter implements WebMvcConfigurer { //注入了全局拦截器的类,然后写他的set,get方法 @Resource private LoginIntercepter loginIntercepter; public LoginIntercepter getLoginIntercepter() { return loginIntercepter; } public void setLoginIntercepter(LoginIntercepter loginIntercepter) { this.loginIntercepter = loginIntercepter; } /** * 拦截器的配置类,配置什么拦截,什么不拦截 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { //1.加载拦截器,addPathPatterns=/**拦截所有,.excludePathPatterns不拦截 registry.addInterceptor(loginIntercepter).addPathPatterns("/**") //登录的请求不能拦截,登录页面也不能拦截。 // "/**/*.html"这种写法是所有的页面都不拦截, // "/**/login.html"这种写法是,除了登录的页面不拦截,其他的页面都拦截 .excludePathPatterns("/deng").excludePathPatterns("/**/login.html"); } }
做完这些后,就开始写控制器的方法了,在这里我是给了他一个固定的参数。
@PostMapping(value ="/deng") public String login(String username, String password, HttpServletRequest request){ if(username.equals("zwh")&&password.equals("123")){ request.getSession().setAttribute("ui",username); return "show"; }else{ return "erro"; } } }
以上就是拦截器的基本使用和介绍。