zoukankan      html  css  js  c++  java
  • SpringMVC杂记(1) 使用阿里巴巴的fastjson

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
    内部邀请码:C8E245J (不写邀请码,没有现金送)
    国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为中国PE第一股,市值超1000亿元。 

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------

     

    1) 国产开源软件要支持的 

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.1</version>
    </dependency>

    2) spring没有提供相应的HttpMessageConverter可以自己写一个。

    package com.alibaba.fastjson.spring.support;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.nio.charset.Charset;
    
    import org.springframework.http.HttpInputMessage;
    import org.springframework.http.HttpOutputMessage;
    import org.springframework.http.MediaType;
    import org.springframework.http.converter.AbstractHttpMessageConverter;
    import org.springframework.http.converter.HttpMessageNotReadableException;
    import org.springframework.http.converter.HttpMessageNotWritableException;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.serializer.SerializerFeature;
    
    public class MappingFastJsonHttpMessageConverter extends AbstractHttpMessageConverter<Object> {
    
        public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
        
        // fastjson特性参数
        private SerializerFeature[] serializerFeature;
    
        public SerializerFeature[] getSerializerFeature() {
            return serializerFeature;
        }
    
        public void setSerializerFeature(SerializerFeature[] serializerFeature) {
            this.serializerFeature = serializerFeature;
        }
    
        public MappingFastJsonHttpMessageConverter() {
            super(new MediaType("application", "json", DEFAULT_CHARSET));
        }
    
        @Override
        public boolean canRead(Class<?> clazz, MediaType mediaType) {
            // JavaType javaType = getJavaType(clazz);
            // return this.objectMapper.canDeserialize(javaType) &&
            // canRead(mediaType);
            return true;
        }
    
        @Override
        public boolean canWrite(Class<?> clazz, MediaType mediaType) {
            // return this.objectMapper.canSerialize(clazz) && canWrite(mediaType);
            return true;
        }
    
        @Override
        protected boolean supports(Class<?> clazz) {
            // should not be called, since we override canRead/Write instead
            throw new UnsupportedOperationException();
        }
    
        @Override
        protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage)
                throws IOException, HttpMessageNotReadableException {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            int i;
            while ((i = inputMessage.getBody().read()) != -1) {
                baos.write(i);
            }
            return JSON.parseArray(baos.toString(), clazz);
        }
    
        @Override
        protected void writeInternal(Object o, HttpOutputMessage outputMessage)
                throws IOException, HttpMessageNotWritableException {
            String jsonString = JSON.toJSONString(o, serializerFeature);
            OutputStream out = outputMessage.getBody();
            out.write(jsonString.getBytes(DEFAULT_CHARSET));
            out.flush();
        }
    
    }

    3) 配置 

    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true" >
            <bean class="com.alibaba.fastjson.spring.support.MappingFastJsonHttpMessageConverter">
                <property name="supportedMediaTypes" value="application/json" />
                <property name="serializerFeature">
                    <array>
                        <value>WriteMapNullValue</value>
                        <value>QuoteFieldNames</value>
                    </array>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
  • 相关阅读:
    暑假自学(19)
    暑假自学(18)
    暑假自学(17)
    暑假自学(16)
    暑假自学(15)
    rsync简介
    10.Go语言-面向对象简单了解
    dp 数字三角形
    P1359租用游艇(dp+dfs)
    油田问题 bfs
  • 原文地址:https://www.cnblogs.com/AloneSword/p/4097941.html
Copyright © 2011-2022 走看看