Spring自定义参数解析器代码实例

作者:咸鱼加点盐 时间:2023-07-02 15:08:06 

这篇文章主要介绍了Spring自定义参数解析器代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

结合redis编写User自定义参数解析器UserArgumentResolver


import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Service;
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 cn.xingaohbd.seckil.model.User;
import cn.xingaohbd.seckil.service.UserService;

@Service
public class UserArgumentResolver implements HandlerMethodArgumentResolver {

@Autowired
 public UserService userService;

public String getParameterCokies(HttpServletRequest request,String tokenName){
   Cookie[] cookies = request.getCookies();
   for (Cookie ck : cookies) {
     if(ck.getName().equals(tokenName)){
       return ck.getValue();
     }
   }
   return null;
 }

@Override
 public boolean supportsParameter(MethodParameter methodParameter) {
   Class<?> p_class = methodParameter.getParameterType();
   return p_class == User.class;
 }

@Override
 public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
     NativeWebRequest nativeWebRequest, WebDataBinderFactory binderFactory) throws Exception {
   HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class);
   String requestParameter_token = request.getParameter("token");
   String cokies_token = getParameterCokies(request, "token");
   if(requestParameter_token == null && cokies_token == null){
     return null;
   }
   return userService.getUserFromRedisByToken(requestParameter_token != null ? requestParameter_token : cokies_token);
 }

}

UserService


@Service
@Transactional
public class UserServiceImpl implements UserService {
 @Autowired
 private UserRedis userRedis;

@Override
 public Object getUserFromRedisByToken(String token) {
   return userRedis.get(token);
 }
}

在WebConfig中注册自定义参数解析器UserArgumentResolver


import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ResourceUtils;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class WebConfig extends WebMvcConfigurationSupport{

@Autowired
 UserArgumentResolver userArgumentResolver;

@Override
 protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
   argumentResolvers.add(userArgumentResolver);
 }

public void addResourceHandlers(ResourceHandlerRegistry registry){
   registry.addResourceHandler("/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
   super.addResourceHandlers(registry);
 }
}

来源:https://www.cnblogs.com/hjy415340835/p/11081702.html

标签:spring,自定义,参数,解析器
0
投稿

猜你喜欢

  • sublime text3搭建配置c语言编译环境的详细图解教程(小白级)

    2021-12-16 09:18:27
  • spring cache注解@Cacheable缓存穿透详解

    2023-12-23 13:41:25
  • Java集合ArrayDeque类实例分析

    2022-06-19 18:25:06
  • Spring框架初始化解析

    2021-06-09 16:46:59
  • Java SpringBoot整合shiro-spring-boot-starterqi项目报错解决

    2022-11-07 03:27:02
  • WPF实现平面三角形3D运动效果

    2021-10-25 02:35:02
  • java实现五子棋程序

    2022-01-29 10:40:38
  • SpringBoot 如何使用Dataway配置数据查询接口

    2021-06-05 17:05:07
  • C#单例模式(Singleton Pattern)实例教程

    2022-11-23 10:44:05
  • 浅谈spring容器中bean的初始化

    2023-11-25 21:25:40
  • Spring boot使用多线程过程步骤解析

    2023-04-03 04:54:50
  • Flink支持哪些数据类型?

    2023-01-15 06:55:43
  • c# 将Minio.exe注册成windows服务

    2022-09-25 20:51:18
  • C#调用C++DLL传递结构体数组的终极解决方案

    2022-05-31 09:54:30
  • SpringBoot项目在IntelliJ IDEA中如何实现热部署

    2023-10-29 13:30:22
  • C#7.0中新特性汇总

    2023-06-24 18:29:13
  • Java中static静态变量的初始化完全解析

    2023-11-27 21:03:39
  • Mybatisplus主键生成策略算法解析

    2022-06-22 20:49:23
  • Android开发Compose集成高德地图实例

    2022-09-05 01:44:28
  • C++实现特殊矩阵的压缩存储算法

    2023-11-17 23:53:06
  • asp之家 软件编程 m.aspxhome.com