关于jackson处理数据
/**
* 将请求参数封装成Map对象
*
* @param json 参数
* @return Object
*/
public static Map wrapMap(String json) {
if (json == null) return null;
ObjectMapper mapper = new ObjectMapper();
mapper.getDeserializationConfig().disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.getDeserializationConfig().setDateFormat(new DateFormat());
try {
return mapper.readValue(json, TypeFactory.mapType(HashMap.class, String.class, Object.class));
} catch (Exception e) {
logger.error(getExceptionMessage(e));
return null;
}
}
/**
* 将请求参数map封装成Bean对象
*
* @param request 请求对象
* @param cls 类class
* @return Object
*/
public static <T> T wrapBean(Class<T> cls, HttpServletRequest request) {
try {
T obj = cls.newInstance();
if (obj instanceof Map) {
BeanUtils.populate(obj, request.getParameterMap());
} else {
setBeanProperty(obj, request.getParameterMap());
}
return obj;
} catch (Exception e) {
logger.error(getExceptionMessage(e));
return null;
}
}
/**
* 将请求参数的parameterMap设置到bean对象的属性中
*
* @param obj bean对象
* @param map request.getParameterMap()
*/
private static void setBeanProperty(Object obj, Map map) {
if (map == null) return;
for (Object o : map.entrySet()) {
Map.Entry entry = (Map.Entry) o;
String key = (String) entry.getKey();
String[] values = null;
String value = null;
Object object = entry.getValue();
if (object != null) {
if (object.getClass() == String[].class) {
values = (String[]) object;
value = values[0];
} else if (object.getClass() == String.class) {
values = new String[]{(String) object};
value = (String) object;
}
}
//String[] values = (String[]) entry.getValue();
if (!PropertyUtils.isWriteable(obj, key)) continue;
try {
Class cls = PropertyUtils.getPropertyType(obj, key);
if (cls == null) continue;
//String value = (values != null && values.length > 0) ? values[0] : null;
if (cls == String.class) PropertyUtils.setProperty(obj, key, value);
else if (cls == String[].class) PropertyUtils.setProperty(obj, key, values);
else if (cls == BigDecimal.class) PropertyUtils.setProperty(obj, key, BeanUtil.toBigDecimal(value));
else if (cls == BigDecimal[].class) PropertyUtils.setProperty(obj, key, BeanUtil.toBigDecimal(values));
else if (cls == BigInteger.class) PropertyUtils.setProperty(obj, key, BeanUtil.toBigInteger(value));
else if (cls == BigInteger[].class) PropertyUtils.setProperty(obj, key, BeanUtil.toBigInteger(values));
else if (cls == Boolean.class) PropertyUtils.setProperty(obj, key, BeanUtil.toBoolean(value));
else if (cls == Boolean[].class) PropertyUtils.setProperty(obj, key, BeanUtil.toBoolean(values));
else if (cls == Double.class) PropertyUtils.setProperty(obj, key, BeanUtil.toDouble(value));
else if (cls == Double[].class) PropertyUtils.setProperty(obj, key, BeanUtil.toDouble(values));
else if (cls == Float.class) PropertyUtils.setProperty(obj, key, BeanUtil.toFloat(value));
else if (cls == Float[].class) PropertyUtils.setProperty(obj, key, BeanUtil.toFloat(values));
else if (cls == Integer.class) PropertyUtils.setProperty(obj, key, BeanUtil.toInteger(value));
else if (cls == Integer[].class) PropertyUtils.setProperty(obj, key, BeanUtil.toInteger(values));
else if (cls == Long.class) PropertyUtils.setProperty(obj, key, BeanUtil.toLong(value));
else if (cls == Long[].class) PropertyUtils.setProperty(obj, key, BeanUtil.toLong(values));
else if (cls == Short.class) PropertyUtils.setProperty(obj, key, BeanUtil.toShort(value));
else if (cls == Short[].class) PropertyUtils.setProperty(obj, key, BeanUtil.toShort(values));
else if (cls == Byte.class) PropertyUtils.setProperty(obj, key, BeanUtil.toByte(value));
else if (cls == Byte[].class) PropertyUtils.setProperty(obj, key, BeanUtil.toByte(values));
else if (cls == Date.class) PropertyUtils.setProperty(obj, key, BeanUtil.toDate(value));
else if (cls == Date[].class) PropertyUtils.setProperty(obj, key, BeanUtil.toDate(values));
} catch (Exception e) {
logger.error(getExceptionMessage(e));
}
}
}
/**
* 设置对象的属性
*
* @param obj
* @param field
* @param value
*/
public static void setProperty(Object obj, Field field, String value) {
try {
if (field.getType() == String.class) PropertyUtils.setProperty(obj, field.getName(), value);
else if (field.getType() == BigDecimal.class)
PropertyUtils.setProperty(obj, field.getName(), BeanUtil.toBigDecimal(value));
else if (field.getType() == BigInteger.class)
PropertyUtils.setProperty(obj, field.getName(), BeanUtil.toBigInteger(value));
else if (field.getType() == Boolean.class)
PropertyUtils.setProperty(obj, field.getName(), BeanUtil.toBoolean(value));
else if (field.getType() == Double.class)
PropertyUtils.setProperty(obj, field.getName(), BeanUtil.toDouble(value));
else if (field.getType() == Float.class)
PropertyUtils.setProperty(obj, field.getName(), BeanUtil.toFloat(value));
else if (field.getType() == Integer.class)
PropertyUtils.setProperty(obj, field.getName(), BeanUtil.toInteger(value));
else if (field.getType() == Long.class)
PropertyUtils.setProperty(obj, field.getName(), BeanUtil.toLong(value));
else if (field.getType() == Short.class)
PropertyUtils.setProperty(obj, field.getName(), BeanUtil.toShort(value));
else if (field.getType() == Byte.class)
PropertyUtils.setProperty(obj, field.getName(), BeanUtil.toByte(value));
else if (field.getType() == Date.class)
PropertyUtils.setProperty(obj, field.getName(), BeanUtil.toDate(value));
} catch (Exception e) {
logger.error(getExceptionMessage(e));
}
}
/**
* 将以json方式提交的字符串封装成Bean对象
*
* @param json json对象
* @param cls bean的class
* @return Object
*/
public static <T> T wrapBean(Class<T> cls, String json) {
if (json == null) return null;
ObjectMapper mapper = new ObjectMapper();
mapper.getDeserializationConfig().disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.getDeserializationConfig().setDateFormat(new DateFormat());
try {
return mapper.readValue(json, cls);
} catch (Exception e) {
logger.error(getExceptionMessage(e));
return null;
}
}
/**
* 将以json方式提交的字符串封装成Bean对象
*
* @param json json对象
* @param javaType bean的class
* @return Object
*/
@SuppressWarnings({"unchecked"})
public static <T> T wrapBean(JavaType javaType, String json) {
if (json == null) return null;
ObjectMapper mapper = new ObjectMapper();
mapper.getDeserializationConfig().disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.getDeserializationConfig().setDateFormat(new DateFormat());
try {
return (T) mapper.readValue(json, javaType);
} catch (Exception e) {
logger.error(getExceptionMessage(e));
return null;
}
}
/**
* 将json 数组封装成 arrays
*
* @param json json数组
* @param cls 类名
* @return T[]
*/
@SuppressWarnings({"unchecked"})
public static <T> T wrapArray(Class cls, String json) {
if (json == null) return null;
return (T) wrapBean(TypeFactory.arrayType(cls), json);
}
/**
* 将以json方式提交的字符串封装成Bean集合
*
* @param jsonArray json数组
* @param cls bean的class
* @return List
*/
public static <T> List<T> wrapBeanList(Class<T> cls, String jsonArray) {
if (jsonArray == null) return null;
ObjectMapper mapper = new ObjectMapper();
mapper.getDeserializationConfig().disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.getDeserializationConfig().setDateFormat(new DateFormat());
try {
return mapper.readValue(jsonArray, TypeFactory.collectionType(List.class, cls));
} catch (Exception e) {
logger.error(getExceptionMessage(e));
return null;
}
}
/**
* 对象转换json字符串
*
* @param obj 对象
* @return String
*/
public static String toJsonString(Object obj) {
if (obj == null) return null;
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
mapper.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
mapper.getSerializationConfig().disable(SerializationConfig.Feature.WRITE_NULL_MAP_VALUES);
mapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
// mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);//为true表示允许单引号
// mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);//为true表示允许无引号包括的字段
// mapper.getSerializationConfig().setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
mapper.getSerializationConfig().setDateFormat(new DateFormat("yyyy-MM-dd HH:mm:ss"));
CustomSerializerFactory sf = new CustomSerializerFactory();
// sf.addSpecificMapping(Long.class, new LongSerializer());
// sf.addSpecificMapping(Double.class,new DoubleSerializer());
sf.addSpecificMapping(TIMESTAMP.class, new TimeStampSerializer());
mapper.setSerializerFactory(sf);
try {
StringWriter sb = new StringWriter();
mapper.writeValue(sb, obj);
return sb.toString();
} catch (Exception e) {
logger.error(getExceptionMessage(e));
return null;
}
}
关于jackson处理数据的更多相关文章
- 利用Jackson将数据转换为Json
1.确保相关依赖导入 2.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app ...
- sun.jersey使用Jackson转换数据
差点被com.sun.jersey自身的json转换吓死,遇到List等类型,会把这些也转换为json对象,而不是jsonarray. 被园里的同行拯救了,在web.xml中配置一下就ok. < ...
- JSON解析器之jackson json数据和java对象转换
- 利用Jackson序列化实现数据脱敏
几天前使用了Jackson对数据的自定义序列化.突发灵感,利用此方法来简单实现接口返回数据脱敏,故写此文记录. 核心思想是利用Jackson的StdSerializer,@JsonSerialize, ...
- com.fasterxml.jackson.databind.JsonMappingException
背景 在搭建SSM整合activiti项目时,在查找activiti定义的流程模板时,前台不能够接受到ProcessDefinition这个对象. 原因 ProcessDefinition是一个接口, ...
- SpringBoot前后端分离Instant时间戳自定义解析
在SpringBoot项目中,前后端规定传递时间使用时间戳(精度ms). @Data public class Incident { @ApiModelProperty(value = "故 ...
- spring boot中的约定优于配置
Spring Boot并不是一个全新的框架,而是将已有的Spring组件整合起来. Spring Boot可以说是遵循约定优于配置这个理念产生的.它的特点是简单.快速和便捷. 既然遵循约定优于配置,则 ...
- Spring Boot基础讲解
Spring Boot Spring Boot 是由Pivotal团队提供的框架,它并不是一个全新的框架,而是将已有的 Spring 组件整合起来,设计目的是用来简化新Spring应用的初始搭建以及开 ...
- Oracle 基于用户管理恢复的处理
================================ -- Oracle 基于用户管理恢复的处理 --================================ Oracle支持多种 ...
随机推荐
- Windows Store App JavaScript 开发:小球运动示例
通过前面内容的学习,相信读者已经对开发基于JavaScript的Windows应用商店应用有了一定的了解,本小节通过一个小球运动的示例来介绍如何新建一个JavaScript的Windows应用商店项目 ...
- ORACLE 连接SQLSERVER 数据库备忘
最近工作需要,要从SQL SERVER数据库中同步提取数据. 这里采用了 Oracle Gateway 来连接,折腾了半天,终于搞定,记录下已备下次使用. 基本资料网上都可以搜很多,官网配置说明在这 ...
- c# 获取 本周、本月、本季度、本年 的开始时间或结束时间
#region 获取 本周.本月.本季度.本年 的开始时间或结束时间 /// <summary> /// 获取结束时间 /// </summary> /// <param ...
- iocp 小例子
2016-08-3116:44:09 server 端 /******************************************************************* aut ...
- linux环境下安装oracle数据库 原文在卡卡100http://www.cnblogs.com/kaka100
centos55_oracle11gr2_install 第一个阶段:安装centos55 a:安装centos5.5 用图形界面安装 硬盘 16G 注意:用图形界面安装.. 第二个阶段:配 ...
- MFC之键盘和键盘消息处理
今天学习了最基本的MFC操作,键盘及键盘消息函数,跟着书中的内容自己编了个小程序.检测用户是否同时按下SHIFT和B键 第一步:先是建了一个单文档模式的MFC程序,添加了键盘消息及处理函数.键盘消息处 ...
- Jmail组件-----发送email
jmail是一个第三方邮件操作组件,通常位于web服务器端,和站点程序紧密配合来接收及提交邮件到邮件服务器的控件,让网站拥有发送邮件既接收邮件的功能. 之所以想尝试它的理由呢 是因为----jmail ...
- google api autocomplete
<input class="flex-item" id="autocomplete" placeholder="address, zip or ...
- aspx文件为什么会慢
你可以在 global.asax 的 Application_Start 方法中写一个日志,例如写 C# code ? 1 2 3 4 5 void Application_Start(objec ...
- 开发板远程操作SQL SERVER解决方案
环境: 开发板:freescale 2.6 armv71,系统只读,唯一可以读写的路径是/tmp/sd(这是一个sd卡).程序放在/tmp/sd/transfer下(下文以运行路径代替),sql语句以 ...