OSChina 第 5 期高手问答:Fastjson & Druid

红薯 发布于 2012/01/02 23:05
阅读 12K+
收藏 24

OSChina 第 5 期高手问答,我们请来了 Fastjson & Druid 的作者 @温少 为大家解答在使用 fastjson 和 druid 的各种问题。

相关介绍:

@温少 具有多年的开发经验,目前就职于阿里巴巴。

fastjson 是一个性能非常之高的 Java 语言实现的 JSON 解析器和生成器。

主要特点:

  • 快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson
  • 强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
  • 零依赖(没有依赖其它任何类库除了JDK)

Druid 是一个JDBC组件,它包括三部分: 

  • DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 
  • DruidDataSource 高效可管理的数据库连接池。 
  • SQLParser 

OSCHINA 高手问答一贯的风格,不欢迎任何与此主题无关的讨论和喷子。

加载中
1
咖啡碼農
咖啡碼農

关于fastjson与spring mvc结合的解决方案

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();
    }

}

spring配置文件加入:

<bean id="jsonConverter" class="com.alibaba.fastjson.spring.support.MappingFastJsonHttpMessageConverter">
    <property name="supportedMediaTypes" value="application/json" />
    <property name="serializerFeature">
        <list>
            <value>WriteMapNullValue</value>
            <value>QuoteFieldNames</value>
        </list>
    </property>
</bean>

jackliang
jackliang
在生产环境中使用过否!!
St_行云
St_行云
是不是配置文件里的application/json没有用啊?是不是可以删掉呢?
xu81.com
xu81.com
关注ing
0
红薯
红薯

http://www.oschina.net/question/155761_35602

这是之前有位朋友等不及的提问

0
鉴客
鉴客
我就想问一个问题:fastjson 在 android 平台上能用吗?
zplswf
zplswf
在Android下不行啊,Color、Font、Point、Rectangle等awt包下的内容都没有的。 只能删除这个是在官网上发现的
JackJew
JackJew
看这个,http://code.alibabatech.com/wiki/pages/diffpages.action?pageId=2424946&originalId=2424948 。支持JDK 5、JDK 6、Android、阿里云手机等环境。
hans汉斯
hans汉斯
工具类跟平台有啥关系?
鉴客
鉴客
@Fred : 不知道 @wenshao 有没有在 Android 测试过?
Fred
Fred
google的虚拟机基本能运行所有的jar库.fastjson没理由不能使用
0
腊八粥
腊八粥
能给出“ 比其它任何基于Java的解析器和生成器更快”的理由要点吗?没研究过fastjson的懒人路过~
染风
染风
@Jeky :
Jeky
Jeky
看这个:http://code.alibabatech.com/wiki/display/FastJSON/Inside+Fastjson
0
空指针
空指针
前几天刚了解了JSON,现在可以接着学习了!哈哈
0
joshuazhan
joshuazhan
还没到4号问答就已经开始了么
0
鉴客
鉴客

哈哈,wenshao 的回答如下;

fastjson一直有android的用户,有一个用户,他们的场景只有fastjson实现,其他的json库会stackoverflow。但是曾经出现过有不兼容的版本(测试不充分),最近的版本1.1.14是在android上测试过的。

fastjson目前的版本在adroid上测试过,阿里巴巴的阿里云手机上也有应用使用fastjson。

0
Binny
Binny

Druid提供对SQL执行性能监控,运用到生产系统中,监控的功能会不会消耗一定的JDBC执行性能?

目前Druid在生产环境中应用了吗?

wenshao
wenshao
Druid性能监StatFilter控消耗的时间很少,在误差范围内,在阿里巴巴内部实施了300多个项目,没发现过性能问题。在公司内部,这个疑虑也是存在的,多个部门做过性能测试,都是在误差范围内,配置了statFilter和不配置的,没有差别。
0
lxbzmy
lxbzmy

org.json,json-lib,flex-json,gosn 我用稍稍用过,最差劲的是gson bug一堆,其他三个或多或少都有缺点。

我看好fastjson

programtic
programtic
您好,你说gson bug一大堆,麻烦告知下gson有哪些问题? 谢谢。
wenshao
wenshao
谢谢支持,我也是同样的自信,目前fastjson的缺点是文档较少,特别是英文文档缺乏,导致无法在国外推广。同样的问题,druid也存在。
0
lxbzmy
lxbzmy
druid 中提供的sql解析我很感兴趣,没有更详细的文档了吗?
lxbzmy
lxbzmy
我想用druid来解析sql 来判断是否是符合语法规则,select 的字段,选择的表,以及条件,但是对类似于ast 语法分析接口不熟悉,不知道如何开始。
wenshao
wenshao
druid中的sql parser已经相当成熟,性能和功能都够好。支持所有mysql的dml以及oracle绝大部分dml。目前文档比较少,都在这里http://code.alibabatech.com/wiki/display/Druid/SQL+Parser,如果感兴趣,可以先阅读例子和源码之后问我。
返回顶部
顶部