• springmvc 自定义view支持json和jsonp格式数据返回


    1.如果controlloer上用@ResponseBody注解,则用<mvc:message-converter>里面配置的json解析器进行解析

    <mvc:annotation-driven>
            <mvc:message-converters register-defaults="true">
                <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                    <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>
                    <property name="features">
                        <array>
                            <value>WriteMapNullValue</value>
                            <value>WriteNullStringAsEmpty</value>
                        </array>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>
    

     

    2.如果希望自定义View进行解析,则不能在controller上加 @ResponseBody注解,理由看一.

    自定义View进行json和jsonp格式的自动判断并返回相应的json格式

    public class JsonView implements View {
    
        private static final String CONTENT_TYPE = "application/json";
        private static final String RESULT = "result";
    
        @Override
        public String getContentType() {
            return CONTENT_TYPE;
        }
    
        @Override
        public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
            if(model != null && model.containsKey(RESULT)){
                Result result = (Result)model.get(RESULT);
                if(result != null){
                    ResultUtils.render(result, request, response);
                }
            }
        }
    }
    

      

    配置ContentNegotiatingViewResolver,进行json解析器选择

    <bean id="contentNegotiationManager"
              class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
            <property name="favorPathExtension" value="true" />
            <property name="favorParameter" value="true" />
            <property name="ignoreAcceptHeader" value="true" />
            <property name="ignoreUnknownPathExtensions" value="false" />
            <property name="mediaTypes">
                <map>
                    <entry key="json" value="application/json"></entry>
                    <entry key="xml" value="application/xml"></entry>
                    <entry key="html" value="text/html"></entry>
                </map>
            </property>
        </bean>
    
        <bean id="contentNegotiatingViewResolver"
              class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
            <property name="order" value="0" />
            <property name="contentNegotiationManager" ref="contentNegotiationManager"/>
    
            <property name="useNotAcceptableStatusCode" value="false"/>
            <!-- 设置默认视图 -->
            <property name="defaultViews">
                <list>
                    <bean class="com.tools.util.JsonView"></bean>
                    <bean class="com.tools.util.JsonpView"></bean>
                </list>
            </property>
    
            <!-- 设置视图解析器 -->
            <property name="viewResolvers">
                <list>
                    <ref bean="viewResolver"/>
                </list>
            </property>
        </bean>
    

      

    order:如果存在多个viewResolver则order值小的被使用,如果没有合适的viewResolver则会使用另外的;

    favorPathExtension:是否支持扩展名,默认为true(支持),扩展名指的xxx.json、xxx.xml等形式

    favorParameter:是否启用参数支持,默认为true(支持),即xxx?format=json、xxx?format=xml等形式,这里的参数名默认为format,可以通过配置改变。

    ignoreAcceptHeader:是否忽略accept header,默认是false(不忽略),即请求时指定的contentType:application/json等,由于我这里要使用扩展名的形式返回,所以把另外两项都关闭了,可视不同情况,使用不同设置;

    mediaTypes:配置扩展名到mimeType的映射,这里配置了json和xml的映射;

    defaultViews:配置视图,这里配置了json和xml的视图,json使用的jackson;

    这样就可以实现不同的文件扩展名用不同的View解析器进行解析

  • 相关阅读:
    TPYBoard读取芯片上的温度传感器
    Micropython实例之TPYBoard来电显示功能演示
    Micropython教程之TPYBoardv102 DIY蓝牙智能小车实例
    TurnipBit—MicroPython开发板:妥妥拽拽零基础也能玩编程
    可视化编程开发板TurnipBit支持LED亮度可调功能
    TPYBoard实例之利用WHID为隔离主机建立隐秘通道
    带以太网的MicroPython开发板:TPYBoardv201建立云加法器实例
    带以太网的MicroPython开发板:TPYBoardv201温湿度上传实例
    数学运算类(三角函数,取整函数,指数函数,取最大值,最小值,绝对值)
    数字格式化和数字分组
  • 原文地址:https://www.cnblogs.com/sidesky/p/7985836.html
Copyright © 2020-2023  润新知