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>
  • 相关阅读:
    牛客网 二叉树的镜像 JAVA
    牛客网 反转链表 JAVA
    牛客网 调整数组顺序使奇数位于偶数前面 JAVA
    Integer to Roman LeetCode Java
    Valid Number leetcode java
    Longest Common Prefix
    Wildcard Matching leetcode java
    Regular Expression Matching
    Longest Palindromic Substring
    Add Binary LeetCode Java
  • 原文地址:https://www.cnblogs.com/AloneSword/p/4097941.html
Copyright © 2011-2022 走看看