zoukankan      html  css  js  c++  java
  • SpringMVC自定义多视图解析器

    实现通过请求url后缀判断返回值类型, 例如 localhost:8080/list 返回JSP页面, localhost:8080/list.json返回json格式数据

    1.创建一枚举返回值类型

     public enum ResultType { REDIRECT, JSP, JSON, XML } 

    2.创建自定义的viewResolver

    public class JsonViewResolver implements ViewResolver {
    
        private View view;
    
        public View getView() {
            return view;
        }
    
        public void setView(View view) {
            this.view = view;
        }
    
        @Override
        public View resolveViewName(String viewName, Locale locale)
                throws Exception {
            return this.view;
        }
    
    }
    public class XmlViewResolver implements ViewResolver {
    
        private View view;
    
        public View getView() {
            return view;
        }
    
        public void setView(View view) {
            this.view = view;
        }
    
        @Override
        public View resolveViewName(String viewName, Locale locale)
                throws Exception {
            return this.view;
        }
    
    }
    public class MultipleViewResolver extends WebApplicationObjectSupport implements
            ViewResolver {
    
        private Map<String, ViewResolver> resolvers;
        private String DefaultViewResolverName = null;
    
        public Map<String, ViewResolver> getResolvers() {
            return resolvers;
        }
    
        public void setResolvers(Map<String, ViewResolver> resolvers) {
            this.resolvers = resolvers;
        }
    
        public String getDefaultViewResolverName() {
            return DefaultViewResolverName;
        }
    
        public void setDefaultViewResolverName(String defaultViewResolverName) {
            DefaultViewResolverName = defaultViewResolverName;
        }
        
        private ViewResolver getDefaultViewResolver() {
            return this.resolvers.get(this.DefaultViewResolverName);
        }
    
        @Override
        public View resolveViewName(String viewName, Locale locale)
                throws Exception {
            ViewResolver viewResolver = null;
            if (viewName.equalsIgnoreCase("json") || viewName.equalsIgnoreCase("xml")) {
                return this.resolvers.get(viewName).resolveViewName(viewName, locale);
            }
            int index = viewName.indexOf(":");
            if (index == -1) {
                viewResolver = this.getDefaultViewResolver();
            } else {
                if (viewName.substring(0, index).equalsIgnoreCase("redirect")) {
                    viewResolver = this.getDefaultViewResolver();
                } else {
                    viewResolver = this.resolvers.get(viewName.substring(0, index));
                    viewName = viewName.substring(index + 1);
                }
            }
            
            if(viewResolver != null) {
                return viewResolver.resolveViewName(viewName, locale);
            }
            return null;
        }
    
    }

    3.创建MyBaseController, 使所有的Controller都对其继承

    public abstract class MyBaseController {
    
        public final String JSON = "json";
        public final String XML = "xml";
    
        protected String result(ResultType resultType, String url) {
    
            resultType = resultType == null ? ResultType.JSP : resultType;
    
            String ext = RequestUtil.getLookupPathExtension(ThreadLocalUtil
                    .getRequest());
    
            if (ext == null) {
                if (resultType.equals(ResultType.JSON)
                        || resultType.equals(ResultType.XML)) {
                    return resultType.name().toLowerCase();
                }
            } else if ("JSON".equalsIgnoreCase(ext) || "XML".equalsIgnoreCase(ext)) {
                return ext;
            }
            if (resultType.equals(ResultType.REDIRECT)) {
                ext = RequestUtil.getLookupPathFullExtension(ThreadLocalUtil
                        .getRequest());
                if (ext != null) {
                    url += ext;
                }
            }
    
            return resultType.name().toLowerCase() + ":" + url;
        }
    }

     4.SpringMVC配置

        <bean name="viewResolver"
            class="org.matrixframework.common.viewresolver.MultipleViewResolver">
            <property name="defaultViewResolverName" value="jsp" />
            <property name="resolvers">
                <map>
                    <entry key="jsp">
                        <!-- JSP视图解析器 -->
                        <bean name="internalResourceViewResolver"
                            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
                            <property name="prefix" value="/WEB-INF/views/jsp" />
                            <property name="suffix" value=".jsp" />
                        </bean>
                    </entry>
                    <entry key="json">
                        <!-- JSON视图解析器 -->
                        <bean name="jsonViewResolver" class="com.framework.common.viewresolver.JsonViewResolver">
                            <property name="view">
                                <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
                                    <property name="contentType" value="text/html; charset=utf-8"/>
                                </bean>
                            </property>
                        </bean>
                    </entry>
                </map>
            </property>
        </bean>
  • 相关阅读:
    ImageMagick
    Let's Encrypt:初次使用免费的ssl证书,并生成java用的 jks(keystore) 文件
    Struts功能详解——ActionMapping对象
    DOS在这里
    Servlet中的过滤器Filter详解
    Servlet 监听器Listener详解
    getInitParameter方法
    Maven的默认中央仓库
    手动事务

  • 原文地址:https://www.cnblogs.com/darkdog/p/4608895.html
Copyright © 2011-2022 走看看