返回顶部
首页 > 资讯 > 精选 >SpringBoot统一处理功能如何实现
  • 708
分享到

SpringBoot统一处理功能如何实现

2023-07-05 14:07:44 708人浏览 安东尼
摘要

本文小编为大家详细介绍“SpringBoot统一处理功能如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“springBoot统一处理功能如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在处理网络请求

本文小编为大家详细介绍“SpringBoot统一处理功能如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“springBoot统一处理功能如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

在处理网络请求时,有一部分功能是需要抽出来统一处理的,与业务隔开。

登录校验

可以利用spring mvc的拦截器Interceptor,实现HandlerInterceptor接口即可。实现该接口后,会在把请求发给Controller之前进行拦截处理。

拦截器的实现分为以下两个步骤:

  • 创建⾃定义拦截器,实现 HandlerInterceptor 接⼝的 preHandle(执⾏具体⽅法之前的预处理)⽅法。

  • 将⾃定义拦截器加⼊ WEBMvcConfigurer 的 addInterceptors ⽅法中。

我们使用session来作为登录校验的例子,实现如下:

package com.demo;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.Http.httpservletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;@Component@Slf4jpublic class LoginInterceptor implements HandlerInterceptor {         @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        // 判断session的信息是否合法        HttpSession session = request.getSession(false);        if (session != null && session.getAttribute("userinfo") != null) {            return true;        }        log.error("当前用户没有访问权限");        response.setStatus(401);        return false;    }}

将写好的⾃定义拦截器通过WebMvcConfigurer注册到容器中,使得拦截器生效,具体实现代码如下:

package com.demo;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorReGIStry;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class MyConfig implements WebMvcConfigurer {    @Autowired    private LoginInterceptor loginInterceptor;    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(loginInterceptor)                .addPathPatterns("@ControllerAdvicepublic class ErrorAdive {    @ExceptionHandler(Exception.class)    @ResponseBody    public HashMap<String, Object> exceptionAdvie(Exception e) {        HashMap<String, Object> result = new HashMap<>();        result.put("code", "-1");        result.put("msg", e.getMessage());        return result;    }    @ExceptionHandler(ArithmeticException.class)    @ResponseBody    public HashMap<String, Object> arithmeticAdvie(ArithmeticException e) {        HashMap<String, Object> result = new HashMap<>();        result.put("code", "-2");        result.put("msg", e.getMessage());        return result;    }}

此时若出现异常就不会报错了,代码会继续执行,但是会把自定义的异常信息返回给前端

原理

@ControllerAdvice是spring的aop对于Controller进行切面所有属性的,包括切入点和需要织入的切面逻辑,配合@ExceptionHandler来捕获Controller中抛出的指定类型的异常,从而达到不同类型的异常区别处理的目的。

返回数据结构

统⼀的返回数据结构可以使用 @ControllerAdvice + ResponseBodyAdvice接口 的方式实现,具体实现代码如下:

package com.demo;import org.springframework.core.MethodParameter;import org.springframework.http.MediaType;import org.springframework.http.server.ServerHttpRequest;import org.springframework.http.server.ServerHttpResponse;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;import java.util.HashMap;@ControllerAdvicepublic class ResponseAdvice implements ResponseBodyAdvice {        @Override    public boolean supports(MethodParameter returnType, Class converterType) {        return true;    }        @Override    public Object beforeBodyWrite(Object body, MethodParameter returnType,                                  MediaType selectedContentType,                                  Class selectedConverterType, ServerHttpR                                          equest request,                                  ServerHttpResponse response) {        // 构造统⼀返回对象        HashMap<String, Object> result = new HashMap<>();        result.put("state", 1);        result.put("msg", "");        result.put("data", body);        return result;    }}

读到这里,这篇“SpringBoot统一处理功能如何实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: SpringBoot统一处理功能如何实现

本文链接: https://lsjlt.com/news/352113.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot统一处理功能如何实现
    本文小编为大家详细介绍“SpringBoot统一处理功能如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot统一处理功能如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在处理网络请求...
    99+
    2023-07-05
  • SpringBoot中的统一功能处理如何实现
    本篇内容介绍了“SpringBoot中的统一功能处理如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、用户登录权限效验⽤户登录权限的...
    99+
    2023-07-05
  • SpringBoot统一功能处理
    前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 本章是讲Spring Bo...
    99+
    2023-09-03
    spring boot java 后端
  • SpringBoot统一处理功能实现的全过程
    目录登录校验异常处理原理返回数据结构在处理网络请求时,有一部分功能是需要抽出来统一处理的,与业务隔开。 登录校验 可以利用spring mvc的拦截器Interceptor,实现Ha...
    99+
    2023-03-20
    SpringBoot统一处理功能 SpringBoot统一处理
  • SpringBoot统一功能处理实现的全过程
    目录前言1.用户登录权限效验1.1 Spring AOP 实现用户统一登录验证1.2 Spring 拦截器1.2.1 自定义拦截器1.2.2 将自定义拦截器加入到系统配置1.3 拦截...
    99+
    2023-01-10
    springboot统一功能 springboot 统一
  • SpringBoot中的统一功能处理怎么实现
    本篇内容介绍了“SpringBoot中的统一功能处理怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、用户登录权限效验⽤户登录权限的...
    99+
    2023-07-06
  • 详解SpringBoot中的统一功能处理的实现
    目录前言一、用户登录权限效验1.1 最初的用户登录验证1.2 Spring AOP 用户统一登录验证的问题1.3 Spring 拦截器1.4 拦截器实现原理1.5 扩展:统一访问前缀...
    99+
    2023-01-28
    SpringBoot统一功能处理 SpringBoot统一功能 SpringBoot统一处理
  • SpringBoot如何实现统一异常处理
    这篇文章将为大家详细讲解有关SpringBoot如何实现统一异常处理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.介绍在日常开发中发生了异常,往往是需要通过一个统一的异常处理处理所有异常...
    99+
    2023-05-31
    springboot 统一异常 异常处理
  • SpringBoot实现功能的统一详解
    目录1. 统一用户登录权限验证1.1 自定义拦截器1.2 将自定义拦截器加入到系统配置1.3 运行结果1.4 总结2. 统一异常处理2.1 代码实现2.2 运行结果3. 统一数据返回...
    99+
    2024-04-02
  • SpringBoot统一功能处理的方式详解
    目录SpringMVC统一处理的三种方式1、基于SpringMVC的配置类扩展2、统一的响应数据格式封装3、统一异常处理基于SpringAOP已经实现统一功能增强,但如果希望对Con...
    99+
    2022-11-13
    SpringBoot统一功能处理 SpringBoot统一处理 SpringBoot统一处理方式
  • jQuery如何实现集合处理功能
    这篇文章给大家分享的是有关jQuery如何实现集合处理功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。集合处理功能对于jQuery返回的集合内容无需我们自己循环遍历并对每个对象...
    99+
    2024-04-02
  • Vue如何实现头像处理功能
    这篇文章主要介绍了Vue如何实现头像处理功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue如何实现头像处理功能文章都会有所收获,下面我们一起来看看吧。代码实现<template> &...
    99+
    2023-07-04
  • SpringBoot中怎么实现统一异常处理
    在Spring Boot中,可以通过@ControllerAdvice注解来实现统一异常处理。以下是一个示例: @Controlle...
    99+
    2024-03-07
    SpringBoot
  • springboot+vue如何实现登录功能
    小编给大家分享一下springboot+vue如何实现登录功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!目录结构前端端口:8080后端端口:8900login.vue<template> &nbs...
    99+
    2023-06-15
  • SpringBoot接口如何统一异常处理
    目录为什么要优雅的处理异常实现案例@ControllerAdvice异常统一处理Controller接口运行测试进一步理解@ControllerAdvice还可以怎么用?@Contr...
    99+
    2024-04-02
  • 如何在Springboot实现拦截器功能
    preHandle: 预先处理,在目标的controller方法执行之前,进行处理 postHandle: 在目标的controller方法执行之后,到达指定页...
    99+
    2024-04-02
  • SpringBoot如何实现文件上传功能
    这篇文章主要介绍了SpringBoot如何实现文件上传功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。经典的文件上传服务器处理上传文件一般都是先在请求中读取文件信息,然后改...
    99+
    2023-06-25
  • SpringBoot如何实现文件下载功能
    这篇文章主要介绍“SpringBoot如何实现文件下载功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot如何实现文件下载功能”文章能帮助大家解决问题。1. 将文件以流的形式一次性...
    99+
    2023-07-05
  • 使用SpringBoot 如何实现一个MySQL 读写分离功能
    本篇文章给大家分享的是有关使用SpringBoot 如何实现一个MySQL 读写分离功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。主从同步的局限性: 这里分为主数据库和从数...
    99+
    2023-06-06
  • SpringBoot中如何进行统一异常处理
    目录1、处理前2、进行系统异常全局处理3、进行自定义异常处理总结如何在SpringBoot项目里进行统一异常处理 需要了解的知识 @ControllerAdvice的作用 1、处理前...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作