软件编程
位置:首页>> 软件编程>> java编程>> Spring自定义参数解析器代码实例

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

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

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

这篇文章主要介绍了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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com