- 浏览: 1654172 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 7335Model和View绑定是虽然不是MVC模式的标配,但是Mod ... -
Ajax支持历史回退前进
2011-04-12 19:56 3618系统大量使用jquery的ajax,Ajax浏览器不能回退和前 ... -
使用Spring MVC HandlerExceptionResolver处理异常
2011-03-08 23:31 72388转载请标明出处:http://fuliang.iteye.co ... -
Spring绑定动态列表成员
2011-01-03 17:06 3208最近遇到一个需求,使用Spring MVC 3,需要绑定动态列 ... -
使用HandlerInterceptor实现简单的授权
2010-11-04 19:37 24069实现拦截器接口HandlerInterceptor或者Hand ... -
BeanPropertyRowMapper
2010-10-07 22:19 8824spring 2.5+提供了BeanPropertyRowMa ... -
(zz)Javascript跨域访问JSONP原理
2010-08-03 21:34 2213Jsonp原理: 首先在客户端注册一个callback (如: ... -
追了getServletContext().getRealPath("/");返回null的问题
2009-12-23 21:05 7028今天把程序部署到服务器,发现异常,FileNotFound异常 ... -
jQuery对url和data编码处理不一致
2009-12-22 11:57 4394function search(){ var search ... -
编码问题
2009-12-19 14:55 1551不管什么程序只要各个地方的编码一致,字符集选择合适,就不会有什 ... -
AJAX 异步传输数据的问题
2008-09-23 16:44 2078要异步传输的数据: .... <action ... -
EJB3感性认识
2008-04-28 19:49 2420面向对象方法课 ... -
使用Struts2+Hibernate+Spring写了一个RSS Reader
2008-04-06 22:11 4832一个简单的RSS Reader其实很好写,或许根本不需要使用S ... -
体验一下Spring2.5 Annotation-based-configration
2008-03-17 21:22 4157Spring2.5 Annotation-based-conf ... -
学SSH2时写的入门例子
2008-03-16 16:11 9702一博友问我有没有以前学SSH2做的入门例子,找了两个放上去,有 ... -
Dependency injection都有人质疑??
2008-01-12 12:46 1789Proffitt认为DI流行的唯一 ... -
Open Session in View
2007-12-08 23:57 3839我们在使用Hibernate的lazy load来优化 ... -
暂别WEB开发学习前的随想...
2007-11-10 20:33 2541在Java世界摸爬滚打了三年多了,J2EE也用了两年了,从js ...
相关推荐
"Jackson-Serializer-Fun"项目显然旨在展示Jackson库在自定义序列化方面的灵活性和深度。让我们深入探讨Jackson库的一些关键特性,以及如何自定义对象序列化以满足特定需求。 1. **Jackson序列化基础**: Jackson...
Jackson能够将Java对象与JSON字符串相互转换,但在使用过程中,开发者可能会遇到字段首字母大小写转换的问题,即当Java类中的字段首字母为大写时,序列化成JSON字符串后首字母会自动转换为小写。本文将探讨Jackson在...
Jackson自定义序列化和反序列化是提高灵活性和控制JSON转换过程的关键功能。当涉及到枚举类型(enum)时,这种定制尤其重要,因为默认的序列化方式可能不满足所有业务需求。 1. **Jackson库**:Jackson是Java领域最...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式...不过,随着技术的发展,现代的Java项目更倾向于使用Gson、Jackson或 FasterXML 等更现代的库来进行JSON操作,因为它们提供了更好的性能和更多的特性。
为此,开发者可以创建自定义的序列化模块(Serializer)或反序列化模块(Deserializer),并注册到JSON库中,以实现个性化的日期格式转换。 在标签"json"下,我们可以推测这个jar包是专门处理JSON相关操作的,包括...
Jackson允许你通过注解(`@JsonFormat`)或者自定义`Serializer`和`Deserializer`来控制日期的序列化和反序列化。例如,你可以使用`@JsonFormat`注解来定义日期格式: ```java import ...
3. **自定义Serializer**:如果我们使用的是`net.sf.json`库,可以创建一个自定义的`JsonSerializer`,重写`processValue()`方法,将日期转换为我们期望的格式。 4. **JSON库配置**:有些JSON库如`org.json`或`json...
在处理JSON中的日期类型时,由于JSON标准不直接支持日期,通常需要自定义转换器。例如,在Java中,你可以创建一个实现了`com.alibaba.fastjson.serializer.JSONValueProcessor`接口的类,实现`process()`方法来按照...
String jsonString = serializer.serialize(person); ``` - **反序列化**: 反之,如果你有一个JSON字符串,并想将其转换回Java对象,可以使用`JSONDeserializer`: ```java String jsonString = "{\"firstName\...
Jsonex JSONCoder是一个轻量级的通用对象序列化/反序列化库,类似于Jackson,GSON或FastJson。 多年来,该库已在各种eBay项目中广泛使用。 它不能替代其他流行的库。 但是,它解决了一些其他替代产品无法提供或无法...
关于 这是一个自以为是的带有狭窄... Serializer serializer = (json) ? new JacksonJsonSerializer(...) : new WoodstoxXmlSerializer(...) serializer.start(); serializer.startContainer("root"); { serializer
3. 自定义类型处理器:通过实现`com.alibaba.fastjson.serializer.SerializerFeature`和`com.alibaba.fastjson.parser.deserializer.DeserializerFeature`接口,可以定制JSON序列化和反序列化的行为。 4. JSON到XML...
然而,对于大规模的JSON处理,可能需要考虑更优化的库,如Jackson或Gson。 6. **示例代码**: - 从提供的描述"flexJson,实例,json转对象,json转List"来看,你可能已经包含了使用FlexJson进行JSON到对象和JSON到...
1. 高速解析:Fastjson采用了优化的算法,使得在处理大规模JSON数据时,其解析速度远超同类产品,如Jackson和Gson等。 2. 简单API:Fastjson提供了简洁的API,使得JSON与Java对象之间的转换变得异常简单,如`JSON....
Fastjson相比其他JSON库如Jackson、Gson等,具有更快的性能和更少的内存消耗,尤其是在处理大数据量时优势明显。同时,Fastjson的API设计简洁,易于理解和使用。 总结,Fastjson作为Java世界中的一员猛将,凭借其...
与其它JSON库如Jackson、Gson等相比,FastJson在某些场景下表现出了更高的性能优势,尤其在大数据量处理时,它的解析速度更为突出。 ### 一、FastJson的基本概念 1. **JSON(JavaScript Object Notation)**:一种...
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer(Object.class); template.setDefaultSerializer(serializer); return template; } } ``` 在上面的代码中,我们使用Jackson...
`StringRedisSerializer`仅用于字符串,`JdkSerializationRedisSerializer`使用Java内置的序列化,而`Jackson2JsonRedisSerializer`则基于流行的Jackson库将对象转换为JSON。 序列化问题通常出现在以下几个方面: ...
1. 快速:Fastjson在速度上相比其他基于Java的JSON库,比如jackson,要快很多。 2. 强大:它能够支持任意的JavaBean以及包括集合、Map、日期和枚举等类的序列化和反序列化。 3. 零依赖:除了JDK,它不依赖其他任何...
例如,使用Jackson2JsonRedisSerializer处理JSON对象: ```java @Bean public RedisTemplate, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate, Object> template = new RedisTemplate();...