Spring MVC serializer calendar to json

In this article, I’m using thymeleaf and data tables as my view, backend is Spring MVC Restful render list of data. The initial problem is my object attribute (calendar) display in timestamp format in view. To solved this problem u need to implement the custom jackson serializer.

Let’s create a class called JsonCalendarSerializer.java

package com.codeomitted.custom.serializer;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
import org.springframework.stereotype.Component;

public class JsonCalendarSerializer extends JsonSerializer<Calendar> {

   private static final DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");

   public void serialize(
          Calendar calendar, JsonGenerator gen,
	  SerializerProvider arg2) throws IOException,
          String strDate = formatter.format(calendar.getTime());


Next, annotate @JsonAutoDetect in your Model class and annotate @JsonSerialize(using=JsonCalendarSerializer.class) on your attribute.

package com.codeomitted.model;
import java.util.Calendar;
import javax.persistence.Column;
import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import com.codeomitted.custom.serializer.JsonCalendarSerializer;
//.. import code omitted

@Table(name = "holidays")
public class Holidays {

    @Column(name = "Description", length = 50)
    private String description;

    public String getDescription() {
        return description;

    public void setDescription(String description) {
        this.description = description;

    @Column(name = "Holiday_Dt")
    private Calendar holidayDt;

    public Calendar getHolidayDt() {
        return this.holidayDt;

    public void setHolidayDt(Calendar id) {
        this.holidayDt = id;



POM, recently tested in version 1.8.x are not working, better use 1.9.2 or latest.

mvn clean eclipse:eclipse


In my html thymeleaf view and data tables.

//code omitted

<div class="dt-wrapper">
  <table style="width: 1138px;" aria-describedby="dt_colVis_Reorder_info" id="dataTable" class="table table-striped table-condensed dataTable">
	    <tr role="row">
		 <th width="20%">Holiday</th>
	         <th width="20%">Description</th>
	<tbody> </tbody>

// code omitted

<script type="text/javascript">
   // <![CDATA[

  $(document).ready(function() {

        "bProcesing" : true,
	"bServerSide" : true,
	"bPaginate": true,
	"bLenthChange" : false,
	"iDisplayLength" : 20,
	"sAjaxSource" : "/codeomitteed/holidays/data",
	"aoColumns" : [
		 "sTitle" : "Holiday Date",
		 "mData" : "holidayDt"
	         "sTitle" : "Description",
		 "mData" : "description"
	"sPaginationType" : "bootstrap",
	"sDom": "<'row-fluid'<'span6'><'span6'>r>t<'row-fluid'<'span6'i><'span6'p>>"

       });// dataTable
   // ]]>

Controller code for response ajax called.

// code omitted

@RequestMapping(value = "/data", produces = "application/json")
public @ResponseBody String showData(
       @RequestParam(value = "iDisplayStart") Integer istart,
       @RequestParam(value = "iDisplayLength") Integer ilength, 
       @RequestParam(value = "sEcho") Integer sEcho,
       @RequestParam(value = "iSortCol_0") Integer sortCol,
       @RequestParam(value = "sSortDir_0") String  dirCol) 
   throws IOException

   istart = (istart == null ? 0 : istart.intValue());
   ilength = (ilength == null ? 10 : ilength.intValue());

   long nrOfPages = service.countAllHolidays() / ilength;
   List<Holidays> list = service.findAndSortBy(start, ilength, sortCol.intValue(), dirCol);

   JsonData<Holidays> json = new JsonData<Holidays>();
   json.setAaData(list);// data

   ObjectMapper mapper = new ObjectMapper();
   try {
      return mapper.writeValueAsString(json);
   } catch (JsonProcessingException e) {
      return null;

In case u need to known JsonData is just a normal class to hold the value for serialise purpose.

public class JsonData<T> implements Serializable {

 	 private static final long serialVersionUID = 1L;
	 private List<T> aaData;
	 private int sEcho;
	 private long iTotalRecords;
	 private long iTotalDisplayRecords;

	 public DataTablesRequest() {


         //  getter setter code omitted


Backend code are using spring data. Partial code are show.

//code omitted

public class HolidayServiceImpl implements HolidaysService {

    HolidaysDAO dao;

    // some other code omitted

    public List<Holidays> findAndSortBy(
                        int firstResult,
			int maxResults, 
                        int sort, String dir) 
	  return dao.findAll(new org.springframework.data.domain.PageRequest(firstResult / maxResults, maxResults, sortBy(sort,dir) )).getContent();

    private Sort sortBy(int sort, String dir) {
	 String[] values = {"holidayDt", "description"};
	 return new Sort(dir.equalsIgnoreCase("asc")? Sort.Direction.ASC: Sort.Direction.DESC, values[sort]);

   // code omitted


Spring MVC serializer calendar to json

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.