我正在使用独立的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例如
我知道这是一个老问题,但我回答是因为我今天遇到了同样的问题而且我失去了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)
这一切都很好.我希望它可以帮助别人.
归档时间: |
|
查看次数: |
47306 次 |
最近记录: |