zoukankan      html  css  js  c++  java
  • SpringBoot笔记--FastJson

    FastJson配置 ObjectId

     class ObjectIdSerializer : ObjectSerializer {
            override fun write(serializer: JSONSerializer?, value: Any?, filedName: Any?, fieldType: Type?, features: Int) {
                val out = serializer!!.getWriter()
                if (value == null) {
                    out.writeNull()
                    return
                }
    
    
                out.writeString(value.toString())
            }
        }
    
    @Configuration
    open class MyWebMvcConfig : WebMvcConfigurerAdapter() {
    
        override fun configureMessageConverters(converters: MutableList<HttpMessageConverter<*>>?) {
            val fastConverter = FastJsonHttpMessageConverter()
    
            val fastJsonConfig = FastJsonConfig()
    //        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat)
            fastJsonConfig.serializeConfig.put(ObjectId::class.java, ObjectIdSerializer());
            fastConverter.fastJsonConfig = fastJsonConfig
    
            //处理中文乱码问题
            fastConverter.supportedMediaTypes = mutableListOf(MediaType.APPLICATION_JSON_UTF8)
    
            var stringMessageConvert = StringHttpMessageConverter();
            stringMessageConvert.setWriteAcceptCharset(false)
            stringMessageConvert.supportedMediaTypes = mutableListOf(MediaType.ALL)
            stringMessageConvert.defaultCharset = Charset.forName("utf-8")
            converters!!.add(stringMessageConvert);
            converters!!.add(fastConverter)
        }
    }
    
    ParserConfig.getGlobalInstance().putDeserializer(ObjectId::class.java, ObjectIdDeserializer())
    
    
    class ObjectIdDeserializer : ObjectDeserializer {
    
        override fun <T> deserialze(parser: DefaultJSONParser, type: Type,
                                    fieldName: Any): T {
            val lexer = parser.getLexer()
            val value = lexer.stringVal()
            return ObjectId(value) as T;
        }
    
        override fun getFastMatchToken(): Int {
            // TODO Auto-generated method stub
            return 0
        }
    }
    
    
    fun <T> T.ToJson(): String {
        if (this is String) return this;
    
        val filter = ValueFilter { source, name, value ->
            if (value is ObjectId) {
                return@ValueFilter value.toString();
            }
            value;
        }
    
    //    var sc = SerializeConfig();
    //    sc.put(ObjectId::class.java, ObjectIdSerializer());
        return JSON.toJSONString(this, filter)
    }
    
  • 相关阅读:
    编写 ES6 的 7 个实用技巧
    [docker] 常用命令
    ansible 的第一次亲密接触
    [bug] JS sort 函数在 ios 中无效
    这几天bug多,自我检讨一下
    【面试】——随手收集面试问题
    Linux的五个查找命令:find,locate,whereis,which,type
    Linux下php安装Redis扩展
    mysql in 子查询 效率慢 优化(转)
    mysql group by 用法解析(详细)
  • 原文地址:https://www.cnblogs.com/newsea/p/7565565.html
Copyright © 2011-2022 走看看