Java Play Framework 2.0:自定义格式化程序
我正在尝试编写一个自定义格式化程序(针对DateTime字段,而不是java.util.Date字段),但要让它正常工作却很困难。我已经创建了注释,并扩展了AnnotationFormatter类。我在应用程序加载时调用play.data.format.Formatters.register(DateTime.class,new MyDateTimeAnnotationFormatter()),但parse和print方法从未触发 我该怎么做 编辑:有问题的代码可能会有帮助;) 注释类(深受Play Framework附带的注释类的启发): 自定义格式化程序类:Java Play Framework 2.0:自定义格式化程序,java,playframework-2.0,Java,Playframework 2.0,我正在尝试编写一个自定义格式化程序(针对DateTime字段,而不是java.util.Date字段),但要让它正常工作却很困难。我已经创建了注释,并扩展了AnnotationFormatter类。我在应用程序加载时调用play.data.format.Formatters.register(DateTime.class,new MyDateTimeAnnotationFormatter()),但parse和print方法从未触发 我该怎么做 编辑:有问题的代码可能会有帮助;) 注释类(深受Pl
public static class AnnotationDateTimeFormatter extends AnnotationFormatter<JodaDateTime, DateTime> {
@Override
public DateTime parse(JodaDateTime annotation, String text, Locale locale) throws ParseException {
if (text == null || text.trim().isEmpty()) {
return null;
}
return DateTimeFormat.forPattern(annotation.pattern()).withLocale(locale).parseDateTime(text);
}
@Override
public String print(JodaDateTime annotation, DateTime value, Locale locale) {
if (value == null) {
return null;
}
return value.toString(annotation.pattern(), locale);
}
我已通过单步调试程序确认,已进行了此调用且未引发任何错误,但格式化程序仍未运行,尽管对DateTime字段进行了如下适当的注释:
@Formats.JodaDateTime(pattern = "dd.MM.yyyy HH:mm:ss")
public DateTime timeOfRequest = new DateTime();
我在这里不知所措。你需要注册JodDateTime而不是DateTime
play.data.format.Formatters.register(JodaDateTime.class, new AnnotationDateTimeFormatter());
我对
DateTime
的格式化程序也有类似的问题。我正在从我的Global.onStart
注册格式化程序,如上所述。似乎仅仅创建全局
类并没有触发重新加载。一旦我修改了另一个触发重新加载的文件(在控制台输出中显示为-(重新加载)
),它就开始工作了。停止和重新启动应用程序也会产生同样的效果。也许你可以发布代码?我确实可以。:)我编辑了我的原始帖子以包含有问题的代码。你解决了这个问题吗?这是错误的。register
的第一个参数必须是AnnotationFormatter.parse
返回的类型。
@Formats.JodaDateTime(pattern = "dd.MM.yyyy HH:mm:ss")
public DateTime timeOfRequest = new DateTime();
play.data.format.Formatters.register(JodaDateTime.class, new AnnotationDateTimeFormatter());