Reputation: 115
I have the below Code :
DTO :
Class MyDTO {
import java.util.Date;
private Date dateOfBirth;
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
}
Controller
public void saveDOB(@RequestBody MyDTO myDTO, HttpServletRequest httprequest, HttpServletResponse httpResponse) {
System.out.println("Inside Controller");
System.out.println(myDTO.getDateOfBirth());
}
JSON Request :
{
"dateOfBirth":"2014-09-04",
}
If I send the request as yyyy-mm-dd automatic conversion to date object happens. output in controller:- dateOfBirth= Thu Sep 04 05:30:00 IST 2014
But when I send DateofBirth in dd-mm-yyyy format It does not convert String to Date automatically.So how i can i handle this case.
JSON Request :
{
"dateOfBirth":"04-09-2014",
}
Output: No Output in console does not even reaches controller.
I have tried with @DateTimeFormat but its not working.
I am using Spring 4.02 Please suggest is there any annotation we can use.
Upvotes: 8
Views: 31976
Reputation: 21
List itemCreate a class to extend JsonDeserializer
public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
String date = jsonParser.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
Use @JsonDeserialize(using = CustomJsonDateDeserializer.class)
annotation on setter
methods.
Thanks @Varun Achar
answer, url
Upvotes: 2
Reputation: 279880
@DateTimeFormat
is for form backing (command) objects. Your JSON is processed (by default) by Jackson's ObjectMapper
in Spring's MappingJackson2HttpMessageConverter
(assuming the latest version of Jackson). This ObjectMapper
has a number of default date formats it can handle. It seems yyyy-mm-dd
is one of them, but dd-mm-yyyy
is not.
You'll need to register your own date format with a ObjectMapper
and register that ObjectMapper
with the MappingJackson2HttpMessageConverter
. Here are various ways to do that :
Alternatively, you can use a JsonDeserializer
on either your whole class or one of its fields (the date). Examples in the link below
Upvotes: 14