gpt4 book ai didi

java - Play Framework 2.0 : Custom formatters

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:05 26 4
gpt4 key购买 nike

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

我应该怎么做?

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

注解类(主要受 Play Framework 中的注解类启发):

@Target({ FIELD })
@Retention(RUNTIME)
@play.data.Form.Display(name = "format.datetime", attributes = { "pattern" })
public static @interface JodaDateTime {
String pattern();
}

自定义格式化程序类:

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

}

为了向框架注册格式化程序,我在 Application 类的静态初始化程序中进行了此调用(可能有更好的地方放置它,请随时告诉我在哪里):

play.data.format.Formatters.register(DateTime.class, new AnnotationDateTimeFormatter());

我已经通过调试器单步执行确认了这个调用并且没有抛出任何错误,但是尽管像这样适本地注释了 DateTime 字段,格式化程序仍然没有运行:

@Formats.JodaDateTime(pattern = "dd.MM.yyyy HH:mm:ss")
public DateTime timeOfRequest = new DateTime();

我在这里不知所措。

最佳答案

您需要注册 JodaDateTime 而不是 DateTime。

play.data.format.Formatters.register(JodaDateTime.class, new AnnotationDateTimeFormatter());

关于java - Play Framework 2.0 : Custom formatters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10939741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com