springMVC源码分析--ViewNameMethodReturnValueHandler返回值处理器(三)
来源:互联网 发布:淘宝开学爆到 编辑:程序博客网 时间:2024/05/16 17:43
之前两篇博客springMVC源码分析--HandlerMethodReturnValueHandler返回值解析器(一)和 springMVC源码分析--HandlerMethodReturnValueHandlerComposite返回值解析器集合(二)我们分别介绍了返回值处理器相关的东西,接下来我们选取一个简单的实现类ViewNameMethodReturnValueHandler来简单介绍一下返回值处理操作。
1、返回值为jsp页面地址
@RequestMapping(value = "input") public String inputProduct() { logger.info("inputProduct called"); return "jsp/ProductForm"; //对应jsp页面名称 }
2、ViewNameMethodReturnValueHandler中对返回值jsp/ProductForm的处理
实现代码如下:
@Overridepublic void handleReturnValue(Object returnValue, MethodParameter returnType,ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {//判断是否是String类型if (returnValue instanceof CharSequence) {//如果是将其设置为视图名称String viewName = returnValue.toString();mavContainer.setViewName(viewName);if (isRedirectViewName(viewName)) {mavContainer.setRedirectModelScenario(true);}}else if (returnValue != null){// should not happenthrow new UnsupportedOperationException("Unexpected return type: " +returnType.getParameterType().getName() + " in method: " + returnType.getMethod());}}
这样就把返回值jsp/ProductForm作为视图名称放到ModelAndView中,这样就完成了返回值的处理操作。
ViewNameMethodReturnValueHandler完整源码如下,处理机制还是比较简单的。
//HandlerMethodReturnValueHandler的子类,主要就是Controller执行后返回的视图名称public class ViewNameMethodReturnValueHandler implements HandlerMethodReturnValueHandler {private String[] redirectPatterns;//设置跳转链接的匹配方式public void setRedirectPatterns(String... redirectPatterns) {this.redirectPatterns = redirectPatterns;}/** * The configured redirect patterns, if any. */public String[] getRedirectPatterns() {return this.redirectPatterns;}@Overridepublic boolean supportsReturnType(MethodParameter returnType) {Class<?> paramType = returnType.getParameterType();return (void.class == paramType || CharSequence.class.isAssignableFrom(paramType));}//实现逻辑还是比较简单的,就是设置ModelAndViewContainer的viewName视图名称@Overridepublic void handleReturnValue(Object returnValue, MethodParameter returnType,ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {if (returnValue instanceof CharSequence) {String viewName = returnValue.toString();mavContainer.setViewName(viewName);if (isRedirectViewName(viewName)) {mavContainer.setRedirectModelScenario(true);}}else if (returnValue != null){// should not happenthrow new UnsupportedOperationException("Unexpected return type: " +returnType.getParameterType().getName() + " in method: " + returnType.getMethod());}}//判断返回值是否是跳转链接,以redirect:开头protected boolean isRedirectViewName(String viewName) {return (PatternMatchUtils.simpleMatch(this.redirectPatterns, viewName) || viewName.startsWith("redirect:"));}}
1 0
- springMVC源码分析--ViewNameMethodReturnValueHandler返回值处理器(三)
- springMVC源码分析--HandlerMethodReturnValueHandler返回值解析器(一)
- springMVC源码分析--AbstractUrlHandlerMapping(三)
- springMVC源码分析--SimpleControllerHandlerAdapter(三)
- springMVC源码分析--AbstractUrlHandlerMapping(三)
- springMVC源码分析--HandlerMethodReturnValueHandlerComposite返回值解析器集合(二)
- SpringMVC自定义参数返回处理器
- SpringMVC源码分析--容器初始化(三)HttpServletBean
- springMVC源码分析--拦截器HandlerExecutionChain(三)
- springMVC源码分析--RequestParamMethodArgumentResolver参数解析器(三)
- springMVC源码分析--HttpMessageConverter写write操作(三)
- springMVC源码分析--页面跳转RedirectView(三)
- SpringMVC源码分析--容器初始化(三)HttpServletBean
- springMVC源码分析--拦截器HandlerExecutionChain(三)
- 云客Drupal8源码分析之实体Entity(三)配置实体储存处理器
- springmvc(三)注解的处理器映射器和适配器
- SpringMVC源码分析(一)
- SpringMVC源码分析(一)
- 刽子手游戏
- 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法
- Windows上安装TensorFlow
- 淘宝内部分享:怎么跳出MySQL的10个大坑
- 社会化媒体营销方案简介
- springMVC源码分析--ViewNameMethodReturnValueHandler返回值处理器(三)
- Web前端基础知识(1)
- bug宝典Node篇 Fail to decode request due to: RpcInvocation
- IDEA中怎么设置黑色或白色背景?
- Mysql主从复制,读写分离(mysql-proxy),双主结构完整构建过程
- sqlsrv函数(自用持续更新)
- 一些对计算机有用的资源
- 2317 Game(哈尔滨理工大学)
- 一次gitlab的重新启用之旅