`
frank1998819
  • 浏览: 764686 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

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

    博客分类:
  • Java
 
阅读更多

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;
}
@Override
public 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();}
}
分享到:
评论

相关推荐

    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