- 浏览: 1638494 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- C/C++ (16)
- Linux (60)
- Algorithm (41)
- ACM (8)
- Ruby (39)
- Ruby on Rails (6)
- FP (2)
- Java SE (39)
- Java EE (6)
- Spring (11)
- Hibernate (1)
- Struts (1)
- Ajax (5)
- php (2)
- Data/Web Mining (20)
- Search Engine (19)
- NLP (2)
- Machine Learning (23)
- R (0)
- Database (10)
- Data Structure (6)
- Design Pattern (16)
- Hadoop (2)
- Browser (0)
- Firefox plugin/XPCOM (8)
- Eclise development (5)
- Architecture (1)
- Server (1)
- Cache (6)
- Code Generation (3)
- Open Source Tool (5)
- Develope Tools (5)
- 读书笔记 (7)
- 备忘 (4)
- 情感 (4)
- Others (20)
- python (0)
最新评论
-
532870393:
请问下,这本书是基于Hadoop1还是Hadoop2?
Hadoop in Action简单笔记(一) -
dongbiying:
不懂呀。。
十大常用数据结构 -
bing_it:
...
使用Spring MVC HandlerExceptionResolver处理异常 -
一别梦心:
按照上面的执行,文件确实是更新了,但是还是找不到kernel, ...
virtualbox 4.08安装虚机Ubuntu11.04增强功能失败解决方法 -
dsjt:
楼主spring 什么版本,我的3.1 ,xml中配置 < ...
使用Spring MVC HandlerExceptionResolver处理异常
转载请标明出处: http://fuliang.iteye.com/blogs/1141293
内容系统需要做分类、抽取等的评测工具,这个工具每次评测的对象需要的字段不一样,可以是一项或多项内容结合的评估。我们希望能够动态定义这些评测的字段,并且这些字段供给ExtJS的表格展现。
ExtJS所consume的JS格式非常固定,所以需要转化成这种固定的格式才能正确展现。所以我们对评估对象targets定义了几个固定的字段id,url,version和动态定义的评测字段evaljson的json字符串。
id | url | evaljson | version
----+-----------------------+-------------------------------------------------------------------------+---------
1 | http://www.tuniu.com/ | {"md5":"856f509af96b3c68dccca042d6a21729","xianlu_confidence":0.732410} | 0
2 | http://www.tuniu.com/ | {"md5":"856f509af96b3c68dccca042d6a21729","xianlu_confidence":0.932410} | 1
这样我们写了模型:
这个直接和数据库的字段对应,方便使用mybatis从数据库取出,分页省略:
而目标ExtJS要consume的格式:
{
evalTargets: [
{id: 1, "version": 0, "url": "http://www.tuniu.com/","md5": "856f509af96b3c68dccca042d6a21729", "xianlu_confidence" : 0.732410},
{id: 2, "version": 1, "url": "http://www.tuniu.com/","md5": "856f509af96b3c68dccca042d6a21729", "xianlu_confidence" : 0.932410}
],
totalCount: 2
}
这时候离ExtJS要consume的格式相差甚远。
我们定义VO来将数据展现,我们把EvalTarget的所有字段封装成一个evalFields,希望能接近我们目标ExtJS要consume的格式。
在控制器中:
这时候生成的JSON格式是这样的:
{
evalTargets: [
{
evalFields: {id: 1, "version": 0, "url": "http://www.tuniu.com/","md5": "856f509af96b3c68dccca042d6a21729", "xianlu_confidence" : 0.732410 }
},
{
evalFields: {id: 2, "version": 1, "url": "http://www.tuniu.com/","md5": "856f509af96b3c68dccca042d6a21729", "xianlu_confidence" : 0.932410}
}
],
totalCount: 2
}
还是和目标有很大的差距,这时候就得用自定义Jackson的Serializer来解决这个格式问题了:
我们简单将EvalTargetVO的evalFields的hashmap使用ObjectMapper写入JsonGenerator即可转换成目标格式。
我们在使用注解来指定Json序列化为我们自定义个序列化类:
这样就解决了对于动态扩展字段提供ExtJs需要的Json格式的数据了。
Jackson Json的一些API以及例子:
http://wiki.fasterxml.com/JacksonInFiveMinutes
内容系统需要做分类、抽取等的评测工具,这个工具每次评测的对象需要的字段不一样,可以是一项或多项内容结合的评估。我们希望能够动态定义这些评测的字段,并且这些字段供给ExtJS的表格展现。
ExtJS所consume的JS格式非常固定,所以需要转化成这种固定的格式才能正确展现。所以我们对评估对象targets定义了几个固定的字段id,url,version和动态定义的评测字段evaljson的json字符串。
引用
id | url | evaljson | version
----+-----------------------+-------------------------------------------------------------------------+---------
1 | http://www.tuniu.com/ | {"md5":"856f509af96b3c68dccca042d6a21729","xianlu_confidence":0.732410} | 0
2 | http://www.tuniu.com/ | {"md5":"856f509af96b3c68dccca042d6a21729","xianlu_confidence":0.932410} | 1
这样我们写了模型:
package com.qunar.search.evaltool.model; public class EvalTarget { private Long id; private String url; private Long version; private String evalJson; //getter setter equals hashcode .... }
这个直接和数据库的字段对应,方便使用mybatis从数据库取出,分页省略:
package com.qunar.search.evaltool.dao; import java.util.List; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import com.qunar.search.evaltool.model.EvalTarget; @Repository public interface EvalTargetDAO { @Select("select * from eval_targets") List<EvalTarget> getEvalTargets(); //other code... }
而目标ExtJS要consume的格式:
引用
{
evalTargets: [
{id: 1, "version": 0, "url": "http://www.tuniu.com/","md5": "856f509af96b3c68dccca042d6a21729", "xianlu_confidence" : 0.732410},
{id: 2, "version": 1, "url": "http://www.tuniu.com/","md5": "856f509af96b3c68dccca042d6a21729", "xianlu_confidence" : 0.932410}
],
totalCount: 2
}
这时候离ExtJS要consume的格式相差甚远。
我们定义VO来将数据展现,我们把EvalTarget的所有字段封装成一个evalFields,希望能接近我们目标ExtJS要consume的格式。
package com.qunar.search.evaltool.vo; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.codehaus.jackson.map.annotate.JsonSerialize; import org.json.JSONException; import org.json.JSONObject; import com.qunar.search.evaltool.model.EvalTarget; public class EvalTargetVO { private Map<String,String> evalFields; public EvalTargetVO(EvalTarget evalTarget){ String evalJson = evalTarget.getEvalJson(); try { evalFields = new HashMap<String,String>(); evalFields.put("id", evalTarget.getId().toString()); evalFields.put("url", evalTarget.getUrl()); evalFields.put("version", evalTarget.getVersion().toString()); JSONObject jsonObject = new JSONObject(evalJson); @SuppressWarnings("rawtypes") Iterator it = jsonObject.keys(); while(it.hasNext()){ String key = it.next().toString(); String value = jsonObject.get(key).toString(); evalFields.put(key, value); } } catch (JSONException e) { e.printStackTrace(); } } public Map<String,String> getEvalFields() { return evalFields; } }
在控制器中:
@RequestMapping(value="/list") public @ResponseBody Map<String,Object> list(){ Map<String,Object> map = new HashMap<String,Object>(); List<EvalTargetVO> evalTargets = wrap2Vo(evalTargetService.getEvalTarget()); map.put("evalTargets", evalTargets); return map; }
这时候生成的JSON格式是这样的:
引用
{
evalTargets: [
{
evalFields: {id: 1, "version": 0, "url": "http://www.tuniu.com/","md5": "856f509af96b3c68dccca042d6a21729", "xianlu_confidence" : 0.732410 }
},
{
evalFields: {id: 2, "version": 1, "url": "http://www.tuniu.com/","md5": "856f509af96b3c68dccca042d6a21729", "xianlu_confidence" : 0.932410}
}
],
totalCount: 2
}
还是和目标有很大的差距,这时候就得用自定义Jackson的Serializer来解决这个格式问题了:
package com.qunar.search.evaltool.vo; import java.io.IOException; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.map.JsonSerializer; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializerProvider; public class EvalTargetVOSerializer extends JsonSerializer<EvalTargetVO>{ @Override public void serialize(EvalTargetVO value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); mapper.writeValue(jgen, value.getEvalFields()); } }
我们简单将EvalTargetVO的evalFields的hashmap使用ObjectMapper写入JsonGenerator即可转换成目标格式。
我们在使用注解来指定Json序列化为我们自定义个序列化类:
@JsonSerialize(using=EvalTargetVOSerializer.class) public class EvalTargetVO
这样就解决了对于动态扩展字段提供ExtJs需要的Json格式的数据了。
Jackson Json的一些API以及例子:
http://wiki.fasterxml.com/JacksonInFiveMinutes
发表评论
-
Builder模式遇到继承
2013-10-13 13:48 0interface Self<T extends ... -
Builder模式遇到集成
2013-10-13 13:47 0package com.qunar.qss.business. ... -
Spring MVC form data binding and ajax form
2011-04-12 23:26 7294Model和View绑定是虽然不是MVC模式的标配,但是Mod ... -
Ajax支持历史回退前进
2011-04-12 19:56 3585系统大量使用jquery的ajax,Ajax浏览器不能回退和前 ... -
使用Spring MVC HandlerExceptionResolver处理异常
2011-03-08 23:31 72268转载请标明出处:http://fuliang.iteye.co ... -
Spring绑定动态列表成员
2011-01-03 17:06 3173最近遇到一个需求,使用Spring MVC 3,需要绑定动态列 ... -
使用HandlerInterceptor实现简单的授权
2010-11-04 19:37 24027实现拦截器接口HandlerInterceptor或者Hand ... -
BeanPropertyRowMapper
2010-10-07 22:19 8786spring 2.5+提供了BeanPropertyRowMa ... -
(zz)Javascript跨域访问JSONP原理
2010-08-03 21:34 2180Jsonp原理: 首先在客户端注册一个callback (如: ... -
追了getServletContext().getRealPath("/");返回null的问题
2009-12-23 21:05 6995今天把程序部署到服务器,发现异常,FileNotFound异常 ... -
jQuery对url和data编码处理不一致
2009-12-22 11:57 4373function search(){ var search ... -
编码问题
2009-12-19 14:55 1526不管什么程序只要各个地方的编码一致,字符集选择合适,就不会有什 ... -
AJAX 异步传输数据的问题
2008-09-23 16:44 2045要异步传输的数据: .... <action ... -
EJB3感性认识
2008-04-28 19:49 2381面向对象方法课 ... -
使用Struts2+Hibernate+Spring写了一个RSS Reader
2008-04-06 22:11 4784一个简单的RSS Reader其实很好写,或许根本不需要使用S ... -
体验一下Spring2.5 Annotation-based-configration
2008-03-17 21:22 4120Spring2.5 Annotation-based-conf ... -
学SSH2时写的入门例子
2008-03-16 16:11 9669一博友问我有没有以前学SSH2做的入门例子,找了两个放上去,有 ... -
Dependency injection都有人质疑??
2008-01-12 12:46 1755Proffitt认为DI流行的唯一 ... -
Open Session in View
2007-12-08 23:57 3792我们在使用Hibernate的lazy load来优化 ... -
暂别WEB开发学习前的随想...
2007-11-10 20:33 2497在Java世界摸爬滚打了三年多了,J2EE也用了两年了,从js ...
相关推荐
litjson包
-Flexible JSON serializer to convert .NET objects to JSON and back again -LINQ to JSON for manually reading and writing JSON -High performance, faster than .NET's built-in JSON serializers -Writes ...
Flexible JSON serializer for converting between .NET objects and JSON LINQ to JSON for manually reading and writing JSON High performance, faster than .NET's built-in JSON serializers Write indented, ...
Flexible JSON serializer for converting between .NET objects and JSON LINQ to JSON for manually reading and writing JSON High performance, faster than .NET"s built-in JSON serializers Write ...
Laravel开发-json-serializer-laravel PHP/Laravel的JSON序列化程序
python-avro-json-serializer, 使用AVRO模式将数据序列化为JSON格式 python Avro JSON序列化程序 AvroJsonSerializer 使用AVRO模式将数据序列化为JSON格式。为什么我们需要序列化程序而不只是转到 JSON?验证数据与...
-Flexible JSON serializer for converting between .NET objects and JSON -LINQ to JSON for manually reading and writing JSON -High performance, faster than .NET's built-in JSON serializers -Write ...
Laravel开发-json-serializer-laravel .zip.zip
-Flexible JSON serializer for converting between .NET objects and JSON -LINQ to JSON for manually reading and writing JSON -High performance, faster than .NET's built-in JSON serializers -Write ...
json-api-serializer 一个Node.js / browser框架不可知库,用于将数据序列化为符合响应(用于在JSON中构建API的规范)。安装npm install --save json-api-serializer文献资料登记var JSONAPISerializer = require ( ...
the Polymorphic JSON Serializer .
|| :warning: 直到版本 1.X 可能会发生重大更改 | CollectionJson::Serializer 将 Ruby 对象序列化为 Collection+JSON,这是 Mike Amudsen 的超媒体类型。 请注意 CollectionJson::Serializer只序列化 data 。 您...
杰克逊序列化器的乐趣有关如何以非常自定义的方式序列化特定类型的属性的POC。 灵感来自文档概念
DIY JSON序列化器实验室 目标 编写JSON序列化器 使用该JSON序列化器呈现信息而无需重新加载页面 介绍 我们将使用我们的产品/订单系统并对其进行增强,以便客户无需刷新页面即可浏览产品目录。 您将在提供的上一个...
jsonapi-serializer 遵循JSON API规范PHP序列化程序。 实体和字段元数据: 定义如何序列化整个实体及其字段定义如何格式化数据指示如何将数据转换为JSON API规范格式处理的数据格式: 关联数组具有公共属性的对象带...
-Flexible JSON serializer for converting between .NET objects and JSON -LINQ to JSON for manually reading and writing JSON -High performance, faster than .NET's built-in JSON serializers -Write ...
-Flexible JSON serializer to convert .NET objects to JSON and back again -LINQ to JSON for reading and writing JSON -Writes indented, easy to read JSON -Convert JSON to and from XML -Supports ...
因此,我听说您使用的不是JSONAPI或REST,而是介于两者之间的混合API的自定义API。 然后,该插件适合您! 它可以为所有Ember Data normalize * Response挂钩提取元数据。 ember install ember-json-serializer-...
赠送jar包:serializer-2.7.2.jar; 赠送原API文档:serializer-2.7.2-javadoc.jar; 赠送源代码:serializer-2.7.2-sources.jar; 赠送Maven依赖信息文件:serializer-2.7.2.pom; 包含翻译后的API文档:serializer...
vraptor-jackson-serializer.zip,使用jackson库进行json序列化的vraptor插件使用jackson库进行json序列化的vraptor插件(http://jackson.codehaus.org/)