Spring 3.2 Date time format

后端 未结 5 1658
情话喂你
情话喂你 2020-12-06 06:18

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

相关标签:
5条回答
  • 2020-12-06 06:58

    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.

    0 讨论(0)
  • 2020-12-06 06:59

    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.

    0 讨论(0)
  • 2020-12-06 06:59

    @NumberFormat and @DateTimeFormat annotations work only in Spring MVC environment. You have to use <mvc:annotation-driven/> in your xml mvc configration file.

    0 讨论(0)
  • 2020-12-06 07:01

    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.

    0 讨论(0)
  • 2020-12-06 07:02

    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.

    0 讨论(0)
提交回复
热议问题