Json与Bean互转,Timestamp类型的问题
来源:互联网 发布:淘宝网规则全文 编辑:程序博客网 时间:2024/05/17 07:24
Json与Java Bean互相转换时,Bean中的Timestamp字段是无法直接处理的,需要实现两个转换器。
DateJsonValueProcessor的作用是Bean转换为Json时将Timepstamp转换为指定的时间格式。
import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import net.sf.json.JsonConfig;import net.sf.json.processors.JsonValueProcessor;/*** 将Bean中的Timestamp转换为json中的日期字符串*/public class DateJsonValueProcessor implements JsonValueProcessor {public static final String Default_DATE_PATTERN ="yyyy-MM-dd";private DateFormat dateFormat ;public DateJsonValueProcessor(String datePattern){try{dateFormat = new SimpleDateFormat(datePattern);}catch(Exception e ){dateFormat = new SimpleDateFormat(Default_DATE_PATTERN);}}public Object processArrayValue(Object value, JsonConfig jsonConfig) {return process(value);}public Object processObjectValue(String key, Object value,JsonConfig jsonConfig) {return process(value);}private Object process(Object value){return dateFormat.format((Date)value);}}
TimestampMorpher的作用则与DateJsonValueProcessor相反,它是在Jsonl转换为Bean时,会把指定的时间格式转换为Timestamp
import java.sql.Timestamp;import java.text.ParseException;import java.text.SimpleDateFormat;import net.sf.ezmorph.MorphException;import net.sf.ezmorph.object.AbstractObjectMorpher;/*** 将json串中的日期字符串转换为bean中的Timestamp*/public class TimestampMorpher extends AbstractObjectMorpher {/*** 日期字符串格式*/private String[] formats;public TimestampMorpher(String[] formats) {this.formats = formats;}public Object morph(Object value) {if( value == null){return null;}if( Timestamp.class.isAssignableFrom(value.getClass()) ){return (Timestamp) value;}if( !supports( value.getClass()) ){throw new MorphException( value.getClass() + " 是不支持的类型");}String strValue=(String) value;SimpleDateFormat dateParser=null;for( int i = 0; i < formats.length ; i++ ){if( null == dateParser ){dateParser=new SimpleDateFormat(formats[i]);}else{dateParser.applyPattern(formats[i]);}try{return new Timestamp( dateParser.parse( strValue.toLowerCase()).getTime() );}catch (ParseException e) {//e.printStackTrace();}}return null;}@Overridepublic Class morphsTo() {return Timestamp.class;}public boolean supports( Class clazz ){return String.class.isAssignableFrom( clazz );}}public class JsonTest {public static void main(String[] args) {String jsonStr="{\"id\":\"101\",\"name\":\"张三\",\"age\":\"20\",\"birthday\":\"1992-10-19 23:52:18\"}";Student s=new Student();Timestamp b=Timestamp.valueOf("1992-10-19 23:52:18");s.setId(123456);s.setName("李四");s.setAge(20);s.setBirthday(b);Student s1=jsonToBean(jsonStr);System.out.println(s1.getBirthday());System.out.println(beanToJson(s));}public static Student jsonToBean(String json){String[] formats={"yyyy-MM-dd HH:mm:ss","yyyy-MM-dd"};JSONUtils.getMorpherRegistry().registerMorpher(new TimestampMorpher(formats));JSONObject jsonObject=JSONObject.fromObject(json);return (Student)JSONObject.toBean(jsonObject,Student.class);}public static String beanToJson(Student s){JsonConfig config=new JsonConfig();config.registerJsonValueProcessor(Timestamp.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss"));JSONObject json=JSONObject.fromObject(s,config);return json.toString();}}
- Json与Bean互转,Timestamp类型的问题
- json自动转换成bean对象时Timestamp的问题!
- JSON Bean互转 (Timestamp 2 Long and Long 2 Timestamp)
- 含有Timestamp、Date的bean和Json相互转换
- js解决通过json传来的timestamp类型时间的显示问题
- mysqldump遇到的timestamp类型的问题
- MySQL的timestamp类型自动更新问题
- MySQL的timestamp类型自动更新问题
- MySQL的timestamp类型自动更新问题
- MySQL的timestamp类型自动更新问题
- Oracle TimeStamp类型精度丢失的问题
- timestamp与date类型的精度对比
- Json与bean的转换
- json与bean的转换
- json与bean,beanlist互转
- Json串与List<Bean>、Bean之间的转换,处理类中List<Bean>属性的序列化问题
- java Timestamp类型插入Timestamp类型的mysql字段的问题
- 带有Data类型的bean对象与JSON对象的转换
- openGL ES 学习第一课(绘制三角形和四边形)
- 启动android project时报resources.ap_ does not exist
- RIA
- plsql编程语法
- poj 2886(线段树+反素数)
- Json与Bean互转,Timestamp类型的问题
- HDU 1211 求逆元
- Fatal error: Call to a member function read() on a non-object in D:\wamp\www\include\dialog\select_i
- Rails部署特别好的文章
- Vim 和 utf-8 bom 头(Byte Order Mark)
- 请问博友们腾讯的游戏为什么这么强???
- Android开发视频教学_mars老师的视频(第三季)
- 当UINavigationController作为UIViewController之后如何去除上部的空白
- 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。