I am using standalone Spring framework and I want to implement Spring 3.2 @DateTimeFormat(pattern = \"dd/mm/yyyy\"), but not getting the expected output.
My code sni
You are calling System.out.println
directly in a method of your class. This can't work that way.
You have to call the dob
field from outside of your class, for instance from a JSP page. And this way, the field will be automatically formatted to the given pattern.
Try changing the format to :
@DateTimeFormat(pattern = "dd/MM/yyyy")
MM
is for months , mm
for minutes .
Just look at this documentation:
The most common ISO DateTime Format yyyy-MM-dd'T'hh:mm:ss.SSSZ e.g.
@NumberFormat and @DateTimeFormat annotations work only in Spring MVC environment. You have to use <mvc:annotation-driven/>
in your xml mvc configration file.
I know it's an old question but I answer because I had the same problem today and I lost 4 hours of work to find the solution. The problem here is spring uses Jackson to serialize and deserialize JSON. @DateTimeFormat
annotation will not do the job, you have to tell Jackson how to serialize the date. You have two solutions: the first one is the simplier and is to use @JsonFormat
annotation in the getter method:
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd/MM/yyyy")
public Date getDob(){
return dob;
}
The second solution is to create a custom serializer for date fields like this:
public class JsonDateSerializer extends JsonSerializer<Date>{
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
@Override
public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
throws IOException, JsonProcessingException {
String formattedDate = dateFormat.format(date);
gen.writeString(formattedDate);
}
}
and then use the annotation in the get method:
@JsonSerialize(using=JsonDateSerializer.class)
public Date getDob(){
return dob;
}
this link explains how to do the serializer
https://dzone.com/articles/how-serialize-javautildate
I faced another problem, I was importing in my JsonDateSerializer class the classes from org.codehaus.jackson
package, but Spring gived me this error:
java.io.FileNotFoundException: class path resource [org/codehaus/jackson/map/JsonSerializer.class] cannot be opened because it does not exist
So I changed all the imports to the package
com.fasterxml.jackson
and it all works fine. I hope it can help someone.
Take a look at your imports in your class. Your date type should be java.util.Date. It might be inheriting from a different class, such as, java.sql.Date.