当前位置: 首页 > news >正文

无锡装饰网站建设排名做旅游的网站的要素

无锡装饰网站建设排名,做旅游的网站的要素,wordpress 拖拽插件,安卓开发需要什么技术主要是三个处理#xff1a; 1、统一用户登录权限验证#xff1b; 2、统一异常处理#xff1b; 3、统一数据格式返回。 目录 一、用户登录权限校验 #x1f345; 1、使用拦截器 #x1f388; 1.1自定义拦截器 #x1f388; 1.2 设置自定义拦截器 #x1f388;创建cont… 主要是三个处理         1、统一用户登录权限验证         2、统一异常处理         3、统一数据格式返回。 目录 一、用户登录权限校验 1、使用拦截器 1.1自定义拦截器 1.2 设置自定义拦截器 创建controller类并且运行项目 2、拦截器原理 二、统一异常处理 三、统一数据返回 为什么需要统一数据返回格式 统一数据返回格式 定义同已返回类型 同以数据处理 业务类 一、用户登录权限校验 1、使用拦截器 可以对一部分方法进行拦截而另一部分不拦截。 1.1自定义拦截器 /* * 全局变量 * */ public class AppVar { // Session keypublic static final String SESSION_KEY SESSION KEY; }/* * 自定义拦截器 * 返回true - 表示拦截器验证成功继续指定后续方法 * 返回false - 表示验证失败不会执行后续的方法了 * */ Component public class UserInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception { // 业务方法HttpSession session request.getSession(false);if (session!null session.getAttribute(AppVar.SESSION_KEY)!null){ // 用户已经登录return true;}return false;} } 1.2 设置自定义拦截器 将自定义拦截器设置当前项目的配置文件中并且设置拦截规则。 拦截器要注入到Spring中才能运行他是伴随着Spring的启动而启动的 Configuration public class AppConfig implements WebMvcConfigurer {Autowiredprivate UserInterceptor userInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) { // registry.addInterceptor(new UserInterceptor());registry.addInterceptor(userInterceptor).addPathPatterns(/**) //(/**)表示拦截所有的请求.excludePathPatterns(/user/reg)//表示过滤拦截不拦截(/user/reg).excludePathPatterns(/user/login);//表示过滤拦截不拦截(/user/login)} } 创建controller类并且运行项目 RestController RequestMapping(/user) public class UserController {RequestMapping(/getuser)public String getUser(){System.out.println(do getUser());return user;}RequestMapping(/reg)public String reg(){System.out.println(do reg());return reg;}RequestMapping(/login)public String login(){System.out.println(do login());return login;} }其中 addPathPatterns表示要拦截的url“/**”表示拦截任意方法elcludePathPatterns表示需要排除的URL以上得拦截规则可以拦截URL包括静态文件图片文件、JS、CSS等一般拦截静态文件的时候我们可以把这些静态文件分类放在static文件中 2、拦截器原理 在使用拦截器之前   使用拦截器之后会在调用Controller之前进行相应的业务处理 实现原理源码分析 所有的controller指定都会通过一个调度器DispatcherServlet来实现 所有的请求都会执行DispatcherServlet中的doDispatcher方法在doDispatcher会执行一系列的事件该事件是在执行拦截器之前的如果该事件返回false后续就不会执行Controller。 以下是doDispatcher中的一部分代码发现在执行controller之前都会追先执行预处理 // 调⽤预处理【重点】if (!mappedHandler.applyPreHandle(processedRequest, respon se)) {return;}// 执⾏ Controller 中的业务mv ha.handle(processedRequest, response, mappedHandler.g etHandler());if (asyncManager.isConcurrentHandlingStarted()) {return; } 那么关于预处理⽅法 applyPreHandle方法从上面的源码可以看出着和我们之前定义的拦截器相似着就是拦截器的实现原理 boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {for(int i 0; i this.interceptorList.size(); this.interceptorIndex i) {// 获取项⽬中使⽤的拦截器 HandlerInterceptorHandlerInterceptor interceptor (HandlerInterceptor)this.interceptorList.get(i);if (!interceptor.preHandle(request, response, this.handler)) {this.triggerAfterCompletion(request, response, (Exception)null);return false;}}return true;} 二、统一异常处理 统一异常处理就是指常规的异常统一处理。 统一异常处理使用的是ControllerAdvice ExceptionHandler来执行的ControllerAdvice表示控制器通知类ExceptionHandler是异常处理两个结合表示当出现异常的时候执行某个通知也就是执行某个方法事件。 首先认为构造一个空指针异常 RequestMapping(/reg)public String reg(){System.out.println(do reg());Object obj null;System.out.println(obj.hashCode());System.out.println();System.out.println(do reg());return reg;} 报错了 这种直接给你报错的方式并不直观所以我们可以进行统一的异常处理返回直观的数据。 然后我们进行统一异常处理 首先定义一个统一的返回对象 Data public class ResultAjax {private int code; //状态码private String msg; //状态码的描述信息private Object data;//返回数据 } 然后定义异常管理器 RestControllerAdvice public class ExceptionAdvice {ExceptionHandler(NullPointerException.class)public ResultAjax doNullPointerException(NullPointerException e){ResultAjax resultAjax new ResultAjax();//错误的信息使用-1描述状态码resultAjax.setCode(-1);resultAjax.setMsg(空指针异常 e.getMessage());resultAjax.setData(null);return resultAjax;} } 这时候就会返回状态的描述信息 也可以直接使用NullPointerException的父类 ExceptionHandler(Exception.class)public ResultAjax doException(Exception e){ResultAjax resultAjax new ResultAjax();resultAjax.setCode(-1);resultAjax.setMsg(空指针异常 e.getMessage());resultAjax.setData(null);return resultAjax;} 三、统一数据返回 为什么需要统一数据返回格式 统一数据返回格式的优点为什么要统一 方便程序员更好的接收和解析后端数据接口返回的数据降低前端程序源和后端程序员的沟通成本按照找某个格式实现所有接口都这样返回有利于项目统一数据的维护和修改有利于后端技术部分的统一规范的标准制定不会出现稀奇古怪的返回内容 统一数据返回格式 定义同已返回类型 Data public class ResultAjax {private int code; //状态码private String msg; //状态码的描述信息private Object data;//返回数据/** 返回成功* */public static ResultAjax success(Object data){ResultAjax resultAjax new ResultAjax();resultAjax.setCode(200);resultAjax.setMsg();resultAjax.setData(data);return resultAjax;}/** 返回失败* */public static ResultAjax fail(int code,String msg){ResultAjax resultAjax new ResultAjax();resultAjax.setCode(code);resultAjax.setMsg(msg);resultAjax.setData(null);return resultAjax;}public static ResultAjax fail(int code,String msg,Object data){ResultAjax resultAjax new ResultAjax();resultAjax.setCode(code);resultAjax.setMsg(msg);resultAjax.setData(null);return resultAjax;} } 同以数据处理 统一数据处理强制执行 ControllerAdvice实现ResponseBodyAdvice接口并且重写它其中的两个方法supports必须返回truebeforeBodyWrite方法进行重新判断和重写操作 ControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice {/** 默认翻会true的时候* 才会执行beforeBodyWrite方法* */Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType,Class selectedConverterType,ServerHttpRequest request,ServerHttpResponse response) {//已经包装好的对象if (body instanceof ResultAjax){return body;} // 没有包装return ResultAjax.success(body);} } 业务类 RestController RequestMapping(/user) public class UserController { RequestMapping(/login)public ResultAjax login(){System.out.println(do login());return ResultAjax.success(login);}RequestMapping(/getnum)public int getNum(){return 1;} } 其中login没有定义返回类型getNum定义了返回类型返回结果分别如下 注意         如果定义的返回值类型是String那么会报错 RequestMapping(/getstring)public String getString(){return qqq;} 那么可以对String类型作出单独处理 Autowiredprivate ObjectMapper objectMapper;Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType,Class selectedConverterType,ServerHttpRequest request,ServerHttpResponse response) {//已经包装好的对象if (body instanceof ResultAjax){return body;} // 对字符串进行单独处理if (body instanceof String){ResultAjax resultAjax ResultAjax.success(body);try {return objectMapper.writeValueAsString(resultAjax);} catch (JsonProcessingException e) {e.printStackTrace();}} // 没有包装return ResultAjax.success(body);} 返回结果
http://www.hkea.cn/news/14485140/

相关文章:

  • 北京网站设计制作关键词优化单页网站排名没有
  • 小企业网站建设查询凡科建设的网站如何
  • 大连城市建设网站上海注册公司流程及费用
  • 网站维护一般都是维护什么网站的类型有哪些
  • 西安有哪些网站建设外包公司机构ui设计培训
  • 建设银行网站登陆不了网站内部资源推广方法
  • 北京市教学名师奖建设项目网站建设哪里看额度
  • 郑州企业建站设计2021年11月最新新闻热点事件
  • PHP套模板做网站焦作住房和城乡建设厅网站
  • 怎么免费建商城网站吗淄博网站建设 熊掌号
  • 装修网站官网地区汽车修理网站建设
  • 做网站竞价怎么找客户阿里巴巴网站推广方式
  • 大连建设厅网站门户网站建设存在的问题和差距
  • 厦门专业网站建设建站购物网站app推广方案
  • 做流量网站吗南昌seo站外优化
  • 企业网站开发 宁波网络公司dw网站首页制作
  • 菜鸟制作个人网站网页实例企业年金如何提取
  • 网站留言效果怎么做长沙网站服务器
  • 郑州网站制作需要多少钱企业网络营销推广
  • 网站设计行业吃香么做游戏的php网站有哪些
  • 常州城乡和住房建设厅网站怎么注销建设银行网站用户
  • 个人网站 费用做网站的得花多少钱
  • 网站需要什么服务器潍坊seo推广
  • 个人网站前置审批项重庆免费发布信息网站
  • 企业网站事例wordpress小程序音频插件
  • 做网站的编程语言网站未来发展规划
  • 手机网站整站源码下载千图网素材免费
  • 快速建设一个网站免费的商城网站
  • 沃尔玛官方网站查余额手机网站翻页底时自动链接
  • phpcms做双语网站微商代理