大部分摘抄自https://www.cnblogs.com/yangzhilong/p/7605889.html。
传统SpringMVC集成自定义HandlerMethodArgumentResolver的方式为:http://www.cnblogs.com/yangzhilong/p/6282218.html
在SpringBoot中是去配置文件化的,具体做法有:
1、启动类继承WebMvcConfigurerAdapter
2、另外写一个@Configuration注解的来继承WebMvcConfigurerAdapter(推荐)
import java.util.List; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import com.longge.LoginUserInfoMethodArgumentResolver; @SpringBootApplication public class MyBootApplication extends WebMvcConfigurerAdapter{ public static void main(String[] args) { SpringApplication.run(MyBootApplication.class, args); } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { super.addArgumentResolvers(argumentResolvers); argumentResolvers.add(new LoginUserInfoMethodArgumentResolver()); } }
import org.apache.commons.lang3.StringUtils; import org.springframework.core.MethodParameter; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; import com.longge.utils.Constant; import com.longge.utils.RedisCacheUtils; /** * 获取用户的session dto */ public class LoginUserInfoMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public Object resolveArgument(MethodParameter arg0, ModelAndViewContainer arg1, NativeWebRequest arg2, WebDataBinderFactory arg3) throws Exception { String token = arg2.getHeader(Constant.TOKEN_KEY); if(StringUtils.isNotBlank(token)) { return RedisCacheUtils.getUserInfo(token); } return null; } @Override public boolean supportsParameter(MethodParameter arg0) { return arg0.getParameterType().equals(UserInfo.class); } }
使用方法:
@ApiOperation("新增") @PutMapping("add") public ResponseResult<SupplierDto> add(UserInfo userInfo, @Valid @RequestBody SupplierDto supplierDto) { // 这里的UserInfo不需要加任何注解,因为LoginUserInfoMethodArgumentResolver是对class的类型来解析的 }
上面是直接使用class类的方式,接下来使用注解的方式来实现
import java.lang.annotation.*; @Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface CurrentUser { }
import com.chinamobile.annation.CurrentUser; import com.chinamobile.dto.CurrentUserData; import com.chinamobile.util.RedisUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.MethodParameter; import org.springframework.util.StringUtils; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver { @Autowired private RedisUtil redisUtil; public CurrentUserMethodArgumentResolver() { } @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.hasParameterAnnotation(CurrentUser.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { String accessToken = webRequest.getHeader("authorization"); if (StringUtils.isEmpty(accessToken)) { return null; } Object object = redisUtil.get(accessToken); if (object instanceof CurrentUserData) { return object; } return null; } }
这里的RedisUtil是一个redis的处理类,自行实现就是。
import com.CurrentUserMethodArgumentResolver; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import java.util.List; @Configuration @Slf4j public class ApiConfig extends WebMvcConfigurerAdapter { /** * 注册解析器bean * * @return */ @Bean public CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver() { return new CurrentUserMethodArgumentResolver(); } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(currentUserMethodArgumentResolver()); } }
使用如下:
/** * 修改用户信息 * * @param userId * @param addUserModel * @param currentUserData * @return */ @PutMapping(value = "/users/{userId}") public CommonResponse<String> updateUser(@PathVariable("userId") Integer userId, @RequestBody AddUserModel addUserModel, @CurrentUser CurrentUserData currentUserData) { CommonResponse<String> commonResponse = new CommonResponse<>(); try { Integer updateBy = currentUserData.getUserId(); // 参数校验 if (userId == null) { commonResponse.setCode(ResponseCode.PARAMETER_ERROR); commonResponse.setMsg("参数校验未通过,请检查参数合法性"); log.info("Parameter check failed."); }else { commonResponse.setCode(ResponseCode.SUCCESS); commonResponse.setMsg("修改用户成功."); log.info("Update user info success."); } } catch (Exception ex) { log.error("SERVER_ERROR: " + ex); commonResponse.setCode(ResponseCode.SERVER_ERROR); commonResponse.setMsg("SERVER_ERROR"); } return commonResponse; }
相关推荐
本主题将深入探讨如何在Spring Boot工程中通过自定义response注解、利用Java反射机制、设置自定义拦截器以及实现WebMvcConfigurer接口来实现这一目标。 首先,我们来看自定义response注解。在Spring Boot中,可以...
在IT行业中,Spring Boot是一个非常流行的Java开发框架,它简化了Spring应用的初始化和配置过程。在处理敏感数据时,脱敏是一个重要的安全措施,它指的是在展示或存储个人信息时,部分替换或隐藏关键信息,如身份证...
而Spring Boot是一个用于简化Spring应用初始搭建以及开发过程的框架。 首先,我们要引入Spring Boot的MQTT客户端库,这通常依赖于Paho MQTT Java Client。在`build.gradle`或`pom.xml`文件中添加以下依赖: ```...
**SpringBoot集成TDengine程序Demo**是一篇关于如何在SpringBoot应用中整合TDengine数据库的实战教程。SpringBoot以其简洁的配置和快速的开发能力深受Java开发者喜爱,而TDengine则是一款高性能、分布式、适用于...
本项目“业务异常提示处理 springboot+Assert(自定义断言)”着重于利用Spring Boot的特性来构建高效、易维护的业务逻辑,并通过自定义断言提升代码的可读性和可维护性。下面我们将详细探讨这些知识点。 1. **Spring...
通过这个SpringBoot集成OCR功能的示例项目,开发者可以学习到如何将OCR技术融入到Spring Boot应用中,提升应用的智能化程度,从而提高工作效率和用户体验。同时,这也是一个了解和实践Java Web开发、RESTful API调用...
然后,在Spring Boot的配置文件`application.yml`或`application.properties`中,我们需要配置CKFinder的相关参数,例如访问路径、存储位置、权限控制等。这可能包括: ```yaml ckfinder: base-path: /ckfinder ...
在本文中,我们将深入探讨如何在SpringBoot应用中集成Impala数据仓库系统,以及涉及到的相关配置和步骤。首先,我们来看看关键的组成部分: 1. **SpringBoot集成**: SpringBoot是基于Spring框架的一个轻量级开发...
综上所述,SpringBoot集成H5微信支付宝支付,主要涉及支付接口的调用、参数配置、支付结果处理等步骤。通过合理的设计与实现,我们可以构建出高效、稳定的支付系统,提升用户的购物体验。在实际开发中,还需要根据...
SpringBoot集成TDengine程序Demo是一个基于SpringBoot框架的示例项目,旨在展示如何将TDengine数据库集成到Java应用中。TDengine是一款专为IoT、工业互联网和大数据处理设计的高性能时序数据库,具备强大的数据处理...
SpringBoot集成WebMagic实现网页数据爬取功能是一个常见的实践,特别是在大数据分析、信息抓取以及自动化测试等领域。这个项目提供了一个可以直接使用的示例工程,帮助开发者快速理解和应用爬虫技术。 1. **...
在本文中,我们将深入探讨如何将SeetaFace6JNI集成到SpringBoot应用中,实现高效的人脸检测和识别功能。SeetaFace6JNI是SeetaFace6库的一个Java封装,它提供了一种与Java应用程序交互的方式,使得在Java环境中也能...
现在,SpringBoot应用已经集成了Mina,并且具备了自定义解码器的能力。当启动应用时,Mina服务器将监听指定的端口,等待客户端的连接,并通过自定义解码器解析接收到的消息。这样,你就可以在SpringBoot的环境中轻松...
3. **配置FastDFS**:在SpringBoot的配置文件`application.yml`或`application.properties`中,配置FastDFS的相关参数,如Tracker Server的地址和端口,以及文件路径等。 4. **编写服务类**:创建一个...
总之,这个"springboot集成jsp的简单例子"是一个很好的学习资源,它涵盖了Spring Boot与JSP集成的基本操作,以及在实际开发中经常遇到的拦截器和中文乱码问题的解决方案。对于初学者来说,这是一个很好的起点,可以...
在IT行业中,Spring Boot是一个非常流行的Java开发框架,它简化了Spring应用的初始搭建以及开发过程,提供了自动配置、起步依赖等特性。本项目聚焦于将富文本编辑器集成到Spring Boot应用中,以增强用户界面的内容...
springboot-父子工程-初始版(包含CRUD示例接口) jpa-hibernate-dm: 数据库为{国产达梦数据库},持久层技术为jpa-hibernate mybatis-dm: 数据库为{国产达梦数据库},持久层技术为mybatis mybatis-plus-dm: 数据库为{...
SpringBoot 2.4.4 集成Ignite是一个常见的技术实践,旨在利用Ignite的强大功能来提升应用程序的性能和可扩展性。Ignite是一个开源的内存数据网格,提供了分布式缓存、分布式计算、流处理和实时分析等功能。下面我们...
再来看Druid,它是一个功能强大且性能优异的数据库连接池,提供了监控、SQL解析、参数绑定等功能。在SpringBoot项目中,我们可以通过`spring-boot-starter-jdbc` starter添加Druid,然后在`application.properties`...
Flyway是一个流行的数据库版本控制工具,它可以与SpringBoot框架集成,以实现自动化的数据库版本控制。在本文中,我们将详细介绍如何将Flyway与SpringBoot集成,实现数据库版本控制。 一、引入依赖 在使用Flyway...