Spring 3.3日期时间格式

bek*_*kur 10 spring

我正在使用独立的Spring框架,我想实现Spring 3.2 @DateTimeFormat(pattern ="dd/mm/yyyy"),但没有获得预期的输出.

我的代码片段是:

    @DateTimeFormat(pattern = "dd/mm/yyyy")
      private Date dob;


    public void  amehotd(){

    Calendar cal;
      cal = Calendar.getInstance ();
          cal.set (1999, Calendar.AUGUST, 30);
          this.dob = cal.getTime();
          System.out.println(dob)    
    }
Run Code Online (Sandbox Code Playgroud)

给出以下结果:

Mon Aug 30 15:08:14 CDT 1999 
Run Code Online (Sandbox Code Playgroud)

但我期待输出如:30/08/1999

我想在没有joda时间库的情况下实现

NIN*_*OOP 21

尝试将格式更改为:

@DateTimeFormat(pattern = "dd/MM/yyyy")
Run Code Online (Sandbox Code Playgroud)

MM几个月,mm几分钟.

看看这个文档:

最常见的ISO DateTime格式yyyy-MM-dd'T'hh:mm:ss.SSSZ例如

  • @DateTimeFormat(pattern ="dd/MM/yyyy")私人日期dob; 但仍然得到:1999年8月30日星期一15:28:22 CDT 1999 (3认同)

ami*_*zer 8

我知道这是一个老问题,但我回答是因为我今天遇到了同样的问题而且我失去了4个小时的工作来找到解决方案.这里的问题是Spring使用Jackson来序列化和反序列化JSON.@DateTimeFormat注释不会完成这项工作,你必须告诉杰克逊如何序列化日期.您有两个解决方案:第一个是更简单的解决方案,并且@JsonFormat在getter方法中使用注释:

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd/MM/yyyy")
public Date getDob(){
    return dob;
}
Run Code Online (Sandbox Code Playgroud)

第二个解决方案是为日期字段创建一个自定义序列化器,如下所示:

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);
    }
} 
Run Code Online (Sandbox Code Playgroud)

然后在get方法中使用注释:

@JsonSerialize(using=JsonDateSerializer.class)
public Date getDob(){
   return dob; 
}
Run Code Online (Sandbox Code Playgroud)

此链接说明了如何执行序列化程序

https://dzone.com/articles/how-serialize-javautildate

我遇到了另一个问题,我在我的JsonDateSerializer类中导入了org.codehaus.jackson包中的类,但是Spring给了我这个错误:

java.io.FileNotFoundException: class path resource [org/codehaus/jackson/map/JsonSerializer.class] cannot be opened because it does not exist
Run Code Online (Sandbox Code Playgroud)

所以我将所有导入更改为包

com.fasterxml.jackson
Run Code Online (Sandbox Code Playgroud)

这一切都很好.我希望它可以帮助别人.