Spring 3.1 JSON date format

java, spring, spring-mvc

Solution

In order to override the default date formatting strategy of Jakson following are the step to follow:

- Extend `JsonSerializer` to create a new class for handling date formatting

- Override `serialize(Date date, JsonGenerator gen, SerializerProvider provider)` function to format date in your desired format and write it back to generator instance (gen)

- Annotate your date getter object to use your extended json serializer using `@JsonSerialize(using = CustomDateSerializer.class)`

Code:

//CustomDateSerializer class
public class CustomDateSerializer extends JsonSerializer<Date> {    
    @Override
    public void serialize(Date value, JsonGenerator gen, SerializerProvider arg2) throws 
        IOException, JsonProcessingException {      

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = formatter.format(value);

        gen.writeString(formattedDate);

    }
}


//date getter method
@JsonSerialize(using = CustomDateSerializer.class)
public Date getDate() {
    return date;
}

Source: http://blog.seyfi.net/2010/03/how-to-control-date-formatting-when.html

Problem

I am using annotated Spring 3.1 MVC code (spring-mvc) and when i send date object through the @RequestBody the date is showing up as numeric. This is my controller ``` @Controller @RequestMapping("/test") public class MyController { @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true)); } @RequestMapping(value = "/getdate", method = RequestMethod.GET) public @ResponseBody Date getDate(@RequestParam("dt") Date dt, Model model) { // dt is properly constructed here.. return new Date(); } } ``` When i pass in date, i am able to receive the date in the format. But my browser displays date as numeric ``` 1327682374011 ``` How do i make it display date in the format I have registered for the webbinder? I saw in some forum that I should use jackson mapper, but cant i alter the existing mapper?

Original source