dubbox REST服务使用fastjson替换jackson
<dubbo:protocol name="rest" port="8080" server="tomcat" contextpath="/" serialization="fastjson" charset="GBK"/>
public void start(URL url) {
getDeployment().getMediaTypeMappings().put("json", "application/json");
getDeployment().getMediaTypeMappings().put("xml", "text/xml");
getDeployment().getProviderClasses().add(RpcContextFilter.class.getName());
//增加对serialization、charset的解析 杨俊明 2017-04-26
String serialization = url.getParameter("serialization");
if (StringUtils.isNotEmpty(serialization)) {
String charset = url.getParameter("charset", "UTF-8");
if (serialization.equals("fastjson")) {
getDeployment().setRegisterBuiltin(false);
getDeployment().getScannedProviderClasses().clear();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect);
fastJsonConfig.setCharset(Charset.forName(charset));
FastJsonProvider jsonProvider = new FastJsonProvider();
jsonProvider.setCharset(Charset.forName(charset));
jsonProvider.setFastJsonConfig(fastJsonConfig);
ResteasyProviderFactory.getInstance().register(jsonProvider);
getDeployment().setProviderFactory(ResteasyProviderFactory.getInstance());
}
}
getDeployment().getProviderClasses().add(RpcExceptionMapper.class.getName());
loadProviders(url.getParameter(Constants.EXTENSION_KEY, ""));
doStart(url);
}
上述代码7-22行,解释下,如果URL里指定了serialization而且是fastjson,就把默认的其它已经扫描到的provider清空,同时注册一个FastJsonProvider。为了满足各种编码格式的要求,对charset也一并做了解析,并传递到FastJsonConfig中。
注:上述代码已经提交到github的个人dubbox分支,需要的朋友们直接down最新源码即可。
三、405 Method Not Allowed 等状态码的处理
与上一节的处理方式类似,自己扩展一个ExceptionHandler即可,然后在dubbox中参考以下配置:
<dubbo:protocol name="rest" ...
extension="xxx.xxx.NotAllowedExceptionHandler,xxx.xxx.NotSupportedExceptionHandler" serialization="fastjson"
/>
extension这里可以随意扩展,多个扩展之间用英文逗号分隔即可,读取extensions的源代码见com.alibaba.dubbo.rpc.protocol.rest.BaseRestServer#loadProviders
protected void loadProviders(String value) {
for (String clazz : Constants.COMMA_SPLIT_PATTERN.split(value)) {
if (!StringUtils.isEmpty(clazz)) {
getDeployment().getProviderClasses().add(clazz.trim());
}
}
}
dubbox REST服务使用fastjson替换jackson的更多相关文章
- spring cloud 学习(11) - 用fastson替换jackson及用gb2312码输出
前几天遇到一个需求,因为要兼容旧项目的编码格式,需要spring-cloud的rest接口,输出gb2312编码,本以为是一个很容易的事情,比如下面这样: @RequestMapping(method ...
- SpringBoot中用Fastjson替换默认的Jackson
一:前言 经过测试,Jackson有很多不合人意的地方,因此建议用Fastjson来替换: 二:Jackson的坑 先定义实体类: @Data @AllArgsConstructor @NoArgsC ...
- jersey 用FastJson替换掉默认的Jackson
@Bean public ResourceConfig resourceConfig() { ResourceConfig resourceConfig = new ResourceConfig(); ...
- spring boot 配置 fastjson 替代 Jackson (并解决返回字符串带双引号问题)
注:以我遇到的情况,只要发出的请求参数是map格式的,都会在前后多加一个双引号 以下代码有两个功能:1.FastJson 替换 Spring 自带的 Jackson 2.解决返回的字符串带双引号问题 ...
- 【Json】fastjson与jackson常用操作记录
本文只是记录fastjson.jackson一些常用的操作方法,没作比较,网上写比较的文章很多啦. 1.对象转Json串 // fastjson String objStr = JSON.toJSON ...
- JSON 解析 (三)—— FastJSON与Jackson比较
一.方便性与性能 调用方便性而言: FastJSON提供了大量静态方法,调用简洁方便 Jackson须实例化类,调用相对繁琐,可通过封装成JSON工具类简化调用 性能而言: FastJSON反序列化的 ...
- 记一次FastJSON和Jackson解析json时遇到的中括号问题
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jadyer/article/details/24395015 完整版见https://jadyer. ...
- fastJson与jackson性能对比
转载:https://blog.csdn.net/u013433821/article/details/82905222最近项目用到fastJson和jackson,为了决定到底弃用哪个,随手写了个测 ...
- springboot自定义消息转换器HttpMessageConverter Spring Boot - 使用Gson替换Jackson
Jackson一直是springframework默认的json库,从4.1开始,springframework支持通过配置GsonHttpMessageConverter的方式使用Gson. 在典型 ...
随机推荐
- [整理]html5 WebApp 01
在正式进入WebApp开发之前,有几个问题要解决: 1.我是产品策划:UI风格,功能设计,产品预期效果(如访问量等各类指标) 2.我是UI设计:图片图标制作,我该按怎样的大小来设计? 3.我是前端开发 ...
- Jerasure库简介及使用范例
刚刚写这篇文章之前看了下上一篇博客的时间:2013年7月19日.居然已经过了3个月了!好快!感叹时间的同时不由的又感叹了下自己的懒惰,其实仔细想想,这段时间自己也做了很多事情: 完成了一篇副本同步相关 ...
- Java使用WebSocket
网页端的消息推送,一般有以下方式: 轮询方式:客户端定时向服务端发送ajax请求,服务器接收到请求后马上返回消息并关闭连接. 优点:后端程序编写比较容易. 缺点:TCP的建立和关闭操作浪费时间和带宽, ...
- npm 更换阿里镜像
使用NPM(Node.js包管理工具)安装依赖时速度特别慢,只需要使用–registry参数指定镜像服务器地址, npm install your-need-model --registry=http ...
- Quartus II 破解教程—FPGA入门教程【钛白Logic】
这一节主要说明如何破解Quartus II 13.1.首先找到我们提供的破解工具,这里我们的电脑是64位的,所以使用64位破解器.如下图. 第一步:将破解工具拷贝到安装目录下“D:\altera\13 ...
- python3迭代器和生成器
1.手动访问迭代器中的元素 #要手动访问迭代器中的元素,可以使用next()函数 In [3]: with open('/etc/passwd') as f: ...: try: ...: while ...
- 运动规划——PT and PVT 模式
最近项目成员在做机器人上层开发时,经常说到PT模式和PVT模式.一直没搞懂这两种模式的实际差别.上网检索进行学习...... ref link:https://blog.csdn.net/m0_376 ...
- linux usb枚举过程分析之守护进程及其唤醒【转】
转自:http://blog.csdn.net/xuelin273/article/details/38646765 usb热插拔,即usb设备可以实现即插即用,像U盘一样,插到电脑里就可以用,不用时 ...
- three.js 初探
2014年3月3日 22:18:40 简单旋转立方体: http://blog.163.com/hailin_xin/blog/static/21816219020136103402812 简单球体入 ...
- 20165203 Mypwd的解读与实现
20165203 Mypwd的解读与实现 pwd 含义:在Linux层次结构中,想要知道当前所处的目录,可以用pwd命令,该命令显示整个路径名. 语法:pwd [option] 描述:pwd 命令将当 ...