`
MINGMING_0302
  • 浏览: 23360 次
  • 性别: Icon_minigender_2
文章分类
社区版块
存档分类
最新评论

Json与Bean互转,Timestamp类型的问题

阅读更多
    Json与Java Bean互相转换时,Bean中的Timestamp字段是无法直接处理的,需要实现两个转换器。

    DateJsonValueProcessor的作用是Bean转换为Json时将Timepstamp转换为指定的时间格式。

import java.text.SimpleDateFormat;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

public class DateJsonBeanProcessor implements JsonValueProcessor {

	private String[] formats;

	public DateJsonBeanProcessor(String[] formats) {
		this.formats = formats;
	}

	@Override
	public Object processArrayValue(Object arg0, JsonConfig arg1) {
		return null;
	}

	@Override
	public Object processObjectValue(String key, Object value, JsonConfig arg2) {

		
		if (value instanceof java.sql.Timestamp) {

			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 SimpleDateFormat(formats[i]).format((java.sql.Timestamp) value);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

			return null;
		}
		return value.toString();
	}

}


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;

public class TimestampMorpher extends AbstractObjectMorpher {

	private String[] formats;

	public TimestampMorpher(String[] formats) {
		this.formats = formats;
	}

	@Override
	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;
	}

	@Override
	public Class morphsTo() {

		return Timestamp.class;
	}

}


测试代码:
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); 

    String[] formats = {"yyyy-MM-dd HH:mm:ss","yyyy-MM-dd"};  
    JSONUtils.getMorpherRegistry().registerMorpher(new TimestampMorpher(formats));  
    JSONObject jsonObject = JSONObject.fromObject(jsonStr); 
    Student s1 = (Student)JSONObject.toBean(jsonObject,Student.class);

    System.out.println(s1.getBirthday());

    JsonConfig config=new JsonConfig();  
    config.registerJsonValueProcessor(Timestamp.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss"));  
    JSONObject json=JSONObject.fromObject(s1,config); 
    System.out.println(json.toString());
    }
}
分享到:
评论

相关推荐

    TimestampMorpher

    在Json中转化字符串到Bean时解决Timestamp格式数据报错问题

    Json 自定义使用函数的简单实例

    BeanUtils库是Apache的一个子项目,提供了方便的Java Bean操作方法,包括属性的设置和获取,以及对象到JSON的转换。 `JsonUtils`类包含以下核心方法: 1. `array2Json(Object[] array)`:此方法用于将一个Java对象...

    fastJSON.docx

    FastJSON 直接支持日期类型数据的格式化,包括 java.util.Date、java.sql.Date、java.sql.Timestamp、java.sql.Time。 FastJSON 还提供了基于格式化输出的 SerializerFeature,例如 WriteDateUseDateFormat,能够...

    springboot2.0 配置时间格式化不生效问题的解决

    总结一下,Spring Boot 2.0中日期格式化不生效的问题通常与自定义的Web MVC配置有关,特别是当使用`WebMvcConfigurationSupport`时。解决方法是在自定义配置类中添加一个日期转换的`Bean`,并确保它在消息转换器列表...

    JAVA项目学习笔记

    9. **@Temporal**: 这个JPA注解用于处理日期和时间类型的字段,例如指定Date类型的属性在数据库中以TemporalType.DATE(只保存日期部分)或TemporalType.TIMESTAMP(保存日期和时间)的形式存储。 以上只是部分关键...

    JavaEE 8 APIs

    在这个版本中,JavaEE引入了许多改进和新特性,旨在提升开发效率、可维护性和互操作性。下面将详细阐述JavaEE 8 API的关键知识点。 1. **Java Servlet 4.0**: - 支持HTTP/2协议,提高了网络传输效率和响应速度。 ...

    hibernate插件资料

    10. **Hibernate Types**:这是一个社区维护的项目,提供了额外的Hibernate类型,如JSON、UUID、TIMESTAMP WITH TIME ZONE等,用于扩展Hibernate默认的数据类型支持。 以上是关于“Hibernate插件资料”中可能涉及的...

    Springboot集成websocket+protobuf基本Demo,可实现后端与前端数据实时发送与接收.zip

    WebSocket与protobuf(Protocol Buffers)的结合则进一步提高了数据传输的效率和性能。protobuf是Google推出的一种高效的数据序列化协议,它能将结构化数据序列化为二进制流,相比JSON或XML,protobuf更紧凑、解析...

    JAVA导出excel文件2003版,结合具体框架的实现

    import org.apache.struts2.json.annotations.JSON; import org.springframework.beans.factory.annotation.Autowired; import com.jerehsoft.common.SystemConfig; import ...

    Javashop开发规范V2.2

    datetime datetime TIMESTAMP datetime long bigint NUMBER bigint decimal decimal NUMBER(20,2) decimal 4 数据导出 String[] tables = new String[1]; tables[0] = "es_auth_action"; DBSolutionFactory....

Global site tag (gtag.js) - Google Analytics