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

来源:脚本之家  责任编辑:小易  

请求会首先被 Spring MVC 的前端请求分发器(Dispatcher)拦截。该拦截器是一个 Servlet,需要在 web.xml 中配置,所有符合所配置的 URL 样式的访问请求,将都会被该拦截器拦截。Spring 提供了默认的分发器 org.springframework.web.servlet.DispatcherServlet,您可以根据需要,决定是否需要定制自己的分发器。在接收到访问请求后,分发器会根据开发人员在 Spring 配置文件或代码中的注解(Annotation),来查找合适的控制器。分发器在查找到合适的控制器后,将请求转交给该控制器处理。通常,控制器会调用相应服务类来处理业务逻辑,在将请求处理后,控制器需返回处理后的结果数据模型(Model)以及下一个需要显示的视图名。在控制器处理结束并返回模型和视图名之后,Spring 会依次调用 Spring 容器中所注册的视图解析器,来查找符合条件的视图。在获得 Spring 视图后,Spring 会根据该视图的配置信息,显示该视图www.zgxue.com防采集请勿采集本网。

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

有了视图类,我们还需要查找该视图类的视图解析器。所有的视图解析器都需要实现接口 org.springframework.web.servlet.ViewResolver,但同视图的实现一样,Spring 还提供了一个抽象类,我们同样

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

一个 AdventureWorksApp Silverlight 项目和一个 AdventureWorksApp.Web Web 应用程序项目。在“解决方案资源管理器”中,AdventureWorksApp 项目。Assets 文件夹,然后展开 Resources

JavaScript Document function show(str) { var str1=\"td\"+str;var str=\"show\"+str;for(var i=1;i;i+) { var obj=document.getElementById('show'+i.toString());if(obj)obj.style.display='none

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;@Servicepublic 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); }}

实现 org.springframework.web.servlet.View org.springframework.web.servlet.ViewResolver 再参考参考这两个实现类 org.springframework.web.servlet.view.InternalResourceView org.

UserService

你可以在原码上打断点看一下,如下图,最终spring会调用“1.”处的方法进行参数解析与绑定。然后,再调用“2.”处的方法反射调用controller中的方法

@Service@Transactionalpublic 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;@Configurationpublic 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); }}

有了视图类,我们还需要查找该视图类的视图解析器。所有的视图解析器都需要实现接口 org.springframework.web.servlet.ViewResolver,但同视图的实现一样,Spring 还提供了一个抽象类,我们同样可以通过实现抽象类来节省开发工作。在本例中,我们开发了自定义视图解析器 GenericFileViewResolver,该类实现了抽象类 org.springframework.web.servlet.view.AbstractCachingViewResolver,从图 3 可以发现,常用的 Spring 中的视图解析器都继承了该抽象类内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • spring boot中自定义json参数解析器的方法
  • spring boot应用配置常用相关视图解析器详解
  • springboot使用自定义json解析器的使用方法
  • 浅谈springmvc之视图解析器(viewresolver)
  • springmvc自定义参数绑定实现详解
  • springboot js-sdk自定义微信分享的实现
  • spring boot创建自定义starter的完整步骤
  • 浅谈spring自定义注解从入门到精通
  • springboot整合ehcache 实现支付超时限制的方法
  • 使用log4j为项目配置日志输出应用详解以及示例演示的实现分析
  • java 工厂模式的实例详解
  • maven如何构建可执行的jar包(包含依赖jar包)
  • java判断字符串string是否为空问题浅析
  • 深入学习springboot线程池的使用和扩展
  • java调用明华rf读写器dll文件过程解析
  • 详解javafx桌面应用开发-group(容器组)
  • java实现数字转换人民币中文大写工具
  • 史上最全的java随机数生成算法分享
  • 如何开发Spring自定义视图和视图解析器
  • 如何开发Spring自定义视图和视图解析器
  • 如何开发Spring自定义视图和视图解析器
  • 如何开发Spring自定义视图和视图解析器
  • 如何开发Spring自定义视图和视图解析器
  • 如何开发Spring自定义视图和视图解析器
  • spring mvc json自定义解析器 服务端方法有多个参数
  • 如何开发Spring自定义视图和视图解析器
  • springmvc是怎么将页面参数去绑定模型层的自定义类的
  • 请你谈谈对spring的理解?
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全c#教程vbvb.netc 语言java编程delphijavaandroidiosswiftscala易语言汇编语言其它相关首页javaspring boot中自定义json参数解析器的方法spring boot应用配置常用相关视图解析器详解springboot使用自定义json解析器的使用方法浅谈springmvc之视图解析器(viewresolver)springmvc自定义参数绑定实现详解springboot js-sdk自定义微信分享的实现spring boot创建自定义starter的完整步骤浅谈spring自定义注解从入门到精通springboot整合ehcache 实现支付超时限制的方法使用log4j为项目配置日志输出应用详解以及示例演示的实现分析java 工厂模式的实例详解maven如何构建可执行的jar包(包含依赖jar包)java判断字符串string是否为空问题浅析深入学习springboot线程池的使用和扩展java调用明华rf读写器dll文件过程解析详解javafx桌面应用开发-group(容器组)java实现数字转换人民币中文大写工具史上最全的java随机数生成算法分享java使double保留两位小数的多方java8 十大新特性详解java.net.socketexception: connjava写入文件的几种方法分享java环境变量的设置方法(图文教程java 十六进制与字符串的转换java list用法示例详解java中file类的使用方法javaweb实现文件上传下载功能实例java 字符串截取的三种方法(推荐java8深入学习系列(一)lambda表达式介绍java中值类型和引用类型的比较与问题解决java求数组第二大元素示例java sha-256加密的两种实现方法详解java quartz定时器任务与spring task定时spring mvc文件上传大小和类型限制以及超spring boot 使用@async实现异步调用方法java class 解析器实现方法示例java深度复制功能与用法实例分析java枚举类enum介绍
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved