Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert Unix timestamp to Java Date, Spring RequestParam

Following is a request fullcalendar js send to the server.

http://localhost:8080/NVB/rest/calendar/events?start=1425168000&end=1428796800 400

How to specify Date pattern (@DateTimeFormat) in Spring Request Param to convert this time to a Date object. I tried different patterns but getting 405 Bad Request.

@RequestMapping(value = "/events", method = RequestMethod.GET)
public @ResponseBody List<EventDto> addOrder(@RequestParam(value = "start") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date start,
                                             @RequestParam(value = "end") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)   Date end) {
    LOGGER.info("Requesting event from [{}] to [{}]", start, end);
    return new LinkedList<EventDto>();
}
like image 593
Susitha Ravinda Senarath Avatar asked Mar 22 '15 15:03

Susitha Ravinda Senarath


2 Answers

Since timestamps aren't a formatted date (going by Java's SimpleDateFormat options), but more a numeric value: I would recommend making a custom data-binder for Date objects if you're doing this more often than this single instance. See http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#portlet-ann-webdatabinder

As a one-off solution you can bind them to Long parameters and create your own Date object with new Date(start).

like image 105
Kafkaesque Avatar answered Dec 10 '22 12:12

Kafkaesque


Using @InitBinder and WebDataBinder:

@RestController
public class SimpleController {

    //... your handlers here...

    @InitBinder
    public void initBinder(final WebDataBinder webdataBinder) {
        webdataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
            @Override
            public void setAsText(String text) throws IllegalArgumentException {
                setValue(new Date(Long.valueOf(text)));
            }
        });
    }
}
like image 45
tchudyk Avatar answered Dec 10 '22 12:12

tchudyk