Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Date as a request parameter in Spring REST

My controller looks like this:

@RequestMapping(value = "/process_date", method = RequestMethod.GET)
    public ResponseEntity processDate
       (@RequestParam(value = "time", required = false) 
        @DateTimeFormat(pattern="yyyy-MM-dd'T'HH:mm:ssXXX") Date date){
// process the date
}

The POSTMAN query:

http://localhost:8080/process_date?date=2014-05-09T00:48:16-04:00

It's giving me IllegalArgumentException. The full exception is:

{
  "timestamp": 1495736131978,
  "status": 400,
  "error": "Bad Request",
  "exception": "org.springframework.web.method.annotation.MethodArgumentTypeMismatchException",
  "message": "Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.util.Date] for value '2013-05-10T07:48:16-04:00'; nested exception is java.lang.IllegalArgumentException: Illegal pattern component: XXX",
  "path": "/airspaces"
}

Now, strangely when I run:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
try {
    System.out.println(df.parse("2013-05-10T07:48:16-04:00"));
} catch (ParseException e) {
    System.out.println("PARSE EXCEPTION!!!");
}

It works without any exception. Same date-format, same date.

One workaround would be to receive the date as a string and then do the conversions through the parser method.

But I'm concerned more about what's going on behind the scene here.

like image 798
Akeshwar Jha Avatar asked May 25 '17 18:05

Akeshwar Jha


Video Answer


1 Answers

yyyy-MM-dd'T'HH:mm:ssXXX

USE:

yyyy-MM-dd'T'HH:mm:ss.SSSXXX >>> 2017-05-04T12:08:56.235-07:00

S Millisecond X Time zone
ISO 8601 time zone -07; -0700; -07:00

like image 130
Rizwan Avatar answered Oct 03 '22 14:10

Rizwan