Java Play Framework 2.0:自定义格式化程序

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

我正在尝试编写一个自定义格式化程序(针对DateTime字段,而不是java.util.Date字段),但要让它正常工作却很困难。我已经创建了注释,并扩展了AnnotationFormatter类。我在应用程序加载时调用play.data.format.Formatters.register(DateTime.class,new MyDateTimeAnnotationFormatter()),但parse和print方法从未触发

我该怎么做

编辑:有问题的代码可能会有帮助;)

注释类(深受Play Framework附带的注释类的启发):

自定义格式化程序类:

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());