首先是异常,你可以自定义异常。
首先写一个实体类类,让他继承异常,你可以在里面写类型。记得写构造方法和有参无参。
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里面,直接就能访问
<form action="/deng" method="post">
用户名:<input type="text" name="username"><br/>
密码:<input type="text" name="password"><br/>
<input type="submit" value="提交">
</form>
首先创建一个全局拦截器的类,让他继承这个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";
}
}
}
以上就是拦截器的基本使用和介绍。










