SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换

摘要:
场景1:SpringMVC表单或Json中的日期字符串与JavaBean的date类型之间的转换:使用SpringMVC时,表单中的日期串与JavaBean中的date类型的转换很常见。例如,下面的代码S_ROLE_ bean QO包含Date类型属性,如果不进行处理,则无法获得该值。WebDataBinder用于将请求参数绑定到指定的属性编辑器。由于从前台传递到控制器的值是String类型的,因此在模型中设置此值时,如果集合的属性是对象,Spring将找到相应的编辑器进行转换,然后将其设置。

SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换

场景一:表单中的日期字符串和JavaBean的Date类型的转换

在使用SpringMVC的时候,经常会遇到表单中的日期字符串和JavaBean的Date类型的转换, 例如,如下代码S_ROLE_QO这个bean中包含有Date类型属性,不处理就拿不到值。

    /**

     * 分页取角色列表

     * @param s_ROLE_QO 角色查询条件

     * @return

     */

    @RequestMapping(value = "/loadRoles", method = RequestMethod.GET)

    @ResponseBody

    public ServerResponse<List<S_ROLE_EO>> loadRoles( S_ROLE_QO s_ROLE_QO) {

        PageHelper.startPage(s_ROLE_QO.getPageIndex(), s_ROLE_QO.getPageSize());

        List<S_ROLE_EO> lst = s_ROLE_DAO.getRolesByConditionWithPaging(s_ROLE_QO);

        PageInfo<S_ROLE_EO> page = new PageInfo<S_ROLE_EO>(lst);

        returnnew ServerResponse<List<S_ROLE_EO>>(1, null, lst, page.getTotal());

    }

而SpringMVC默认不支持这个格式的转换,所以需要手动配置,自定义数据的绑定才能解决这个问题。

WebDataBinder是用来绑定请求参数到指定的属性编辑器.由于前台传到controller里的值是String类型的,当往Model里Set这个值的时候,如果set的这个属性是个对象,Spring就会去找到对应的editor进行转换,然后再SET进去。

代码如下:

    publicstatic String GREGORIAN_DATEFORMAT= "EEE MMM dd yyyy hh:mm:ss z";

    

    //将表单中特定日期类型的日期字符串转换成Javabean中的日期类型的属性

    @InitBinder

    protectedvoidinitBinder(WebDataBinder binder) {

        SimpleDateFormat dateFormat = new SimpleDateFormat(GREGORIAN_DATEFORMAT, Locale.ENGLISH);

        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));

    }

场景二:Json中的日期字符串和JavaBean的Date类型的转换

还是上面的代码,只不过加了个@RequestBody,采用json格式传参

SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换第1张

这个时候处理方式:

往工程中引入以下包,如果是maven工程,在pom文件中加入

    <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-core</artifactId>

            <version>2.7.3</version>

        </dependency>

        <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-annotations</artifactId>

            <version>2.7.3</version>

        </dependency>

        <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-databind</artifactId>

            <version>2.7.3</version>

        </dependency>

然后在工具包添加如下工具类:

@Component

publicclass JsonDateSerializer extends JsonSerializer<Date> {

    @Override

    publicvoid serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {

        jsonGenerator.writeString(DateUtil.format(date));

    }

}

publicclass JsonDateDeSerializer extends JsonDeserializer<Date> {

    @Override

    public Date deserialize(JsonParser p, DeserializationContext ctxt)

            throws IOException, JsonProcessingException {

        String dataFormat=null;

        String date = p.getText();

        // 判断客户端传过来的是否是UTC类型

        if (p.getText().contains("Z")) {

            dataFormat="yyyy-MM-dd'T'HH:mm:ss.SSS Z";

            date=date.replace("Z", " UTC");

        }

        return    DateUtil.format(date,dataFormat) ;

    }

}

/**

* 日期工具类

*

* Date类型转换为日期字符串之间的转换

*

*/

publicclass DateUtil {

    /**

     * Date类型转换为字符串

     *

     * @param date

     * 日期类型

     * @return日期字符串

     */

    publicstatic String format(Date date) {

        returnformat(date, "yyyy-MM-dd HH:mm:ss");

    }

    /**

     * Date类型转换为字符串

     *

     * @param date

     * 日期类型

     * @param pattern

     * 字符串格式

     * @return日期字符串

     */

    publicstatic String format(Date date, String pattern) {

        if (date == null) {

            return"null";

        }

        if (pattern == null || pattern.equals("") || pattern.equals("null")) {

            pattern = "yyyy-MM-dd HH:mm:ss";

        }

        returnnew java.text.SimpleDateFormat(pattern).format(date);

    }

    /**

     * 将字符串转换为Date类型

     *

     * @param date

     * 字符串类型

     * @return日期类型

     */

    publicstatic Date format(String date) {

        returnformat(date, null);

    }

    /**

     * 将字符串转换为Date类型

     *

     * @param date

     * 字符串类型

     * @param pattern

     * 格式

     * @return日期类型

     */

    publicstatic Date format(String date, String pattern) {

        if (pattern == null || pattern.equals("") || pattern.equals("null")) {

            pattern = "yyyy-MM-dd HH:mm:ss";

        }

        if (date == null || date.equals("") || date.equals("null")) {

            returnnew Date();

        }

        Date d = null;

        try {

             SimpleDateFormat sdf = new SimpleDateFormat(pattern);

            if (pattern.equals("yyyy-MM-dd'T'HH:mm:ss.SSS Z")) {

                 sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

            }

            d = sdf.parse(date);

        } catch (ParseException pe) {

        }

        returnd;

    }

    

}

最后在JavaBean的Date类型属性的get set方法上添加如下注解,注意springMVC的注解驱动<mvc:annotation-driven> 要配置

@JsonSerialize(using = JsonDateSerializer.class)

    public Date getCreateTimeStart() {

        returncreateTimeStart;

    }

    @JsonDeserialize(using = JsonDateDeSerializer.class)

    publicvoid setCreateTimeStart(Date createTimeStart) {

        this.createTimeStart = createTimeStart;

    }

    

免责声明:文章转载自《SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows中的时间(SYSTEMTIME和FILETIME) (转载)SDWebImage缓存机制下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

日期格式转换 java 2016-09-03T00:00:00.000+08:00

/**  * 日期格式转换yyyy-MM-dd‘T‘HH:mm:ss.SSSXXX  TO  yyyy-MM-dd HH:mm:ss  * @throws ParseException   */ public static String dealDateFormat(String oldDateStr) throws ParseException{  //...

API安全(五)-参数校验

1、为什么要做数据校验 要保证系统的安全性,健壮性,数据校验必不可少,校验参数的合法性,不能因为前端或者其它调用段因为参数传的不对导致我们的系统报错。 2、开发中参数校验做在哪里 一般都是做在接口层面,对传入的参数进行校验。 3、Bean Validation 对于Controller接口的参数校验,如果参数较少可以自己写代码进行校,但是如果参数较多,就会...

Android 获取系统时间以及实时刷新时间(附参考代码)

使用date获取系统时间: private SimpleDateFormat simpleDateFormat; private Date date; //onCreate中 simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); date = n...

SpringMVC 使用验证框架 Bean Validation(上)

SpringMVC 使用验证框架 Bean Validation(上) 对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证。 SpringMVC 自身对数据在服务端的校验(Hibernate Validator)有一个比较好的支持,它能将我们提交到服务端的数据按照我们事先的约定进行数...

VUE 日历签到

<style lang="scss"> @import "../assets/css/px2rem.scss"; .sign-box { 100%; min-height: 100%; background: #f5f5f5; position: relative; .top-box { padding: px2r...

DB2字符处理函数

转自:http://www.blogjava.net/bingle/archive/2007/07/11/129681.html -----------------------------------字符串连接运算:db2中使用的是"||"----------------------------------- 一、字符转换函数 1、ASCII() 返回字符...