3
{
"toDepartureDate": "2016-12-28",
"fromDepartureDate": "2016-12-28"
}

I want to post above String dates in json as java.time.LocalDate, but I am receiving 400 Bad Request as error. Could some one help here. I have used @JsonFormat but it did not help me either.

@JsonFormat(shape=JsonFormat.Shape.STRING,pattern="yyyy-MM-dd",timezone = "GMT+5:30")

private LocalDate fromDepartureDate;

@JsonFormat(shape=JsonFormat.Shape.STRING,pattern="yyyy-MM-dd",timezone = "GMT+5:30")
private LocalDate toDepartureDate;




{
  "timestamp": 1482942147246,
  "status": 400,
  "error": "Bad Request",
  "exception": "org.springframework.validation.BindException",
  "errors": [
    {
      "codes": [
        "typeMismatch.flightReportSearchDto.fromDepartureDate",
        "typeMismatch.fromDepartureDate",
        "typeMismatch.java.time.LocalDate",
        "typeMismatch"
      ],
      "arguments": [
        {
          "codes": [
            "flightReportSearchDto.fromDepartureDate",
            "fromDepartureDate"
          ],
          "arguments": null,
          "defaultMessage": "fromDepartureDate",
          "code": "fromDepartureDate"
        }
      ],
      "defaultMessage": "Failed to convert property value of type [java.lang.String] to required type [java.time.LocalDate] for property 'fromDepartureDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@com.fasterxml.jackson.annotation.JsonFormat java.time.LocalDate] for value '2016-12-28'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2016-12-28]",
      "objectName": "flightReportSearchDto",
      "field": "fromDepartureDate",
      "rejectedValue": "2016-12-28",
      "bindingFailure": true,
      "code": "typeMismatch"
    },
    {
      "codes": [
        "typeMismatch.flightReportSearchDto.toDepartureDate",
        "typeMismatch.toDepartureDate",
        "typeMismatch.java.time.LocalDate",
        "typeMismatch"
      ],
      "arguments": [
        {
          "codes": [
            "flightReportSearchDto.toDepartureDate",
            "toDepartureDate"
          ],
          "arguments": null,
          "defaultMessage": "toDepartureDate",
          "code": "toDepartureDate"
        }
      ],
      "defaultMessage": "Failed to convert property value of type [java.lang.String] to required type [java.time.LocalDate] for property 'toDepartureDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@com.fasterxml.jackson.annotation.JsonFormat java.time.LocalDate] for value '2016-12-29'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2016-12-29]",
      "objectName": "flightReportSearchDto",
      "field": "toDepartureDate",
      "rejectedValue": "2016-12-29",
      "bindingFailure": true,
      "code": "typeMismatch"
    }
  ]

} 
Jaap
  • 81,064
  • 34
  • 182
  • 193
Chandan Gawri
  • 364
  • 1
  • 4
  • 15
  • 2
    Look like a duplicate of this one: http://stackoverflow.com/questions/28802544/java-8-localdate-jackson-format – Rob Baily Dec 28 '16 at 17:19

2 Answers2

5

Add in your date property

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
dtelaroli
  • 1,227
  • 1
  • 13
  • 20
0

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)

The previous answer works fine for me. Only add, that if you need to change date format, you can use this sentence:

th:value="${#temporals.format(fromDepartureDate,'yyyy-MM-dd')}"