当前位置: 首页 > 知识库问答 >
问题:

如何将Thymeleaf的th:字段值解析为java。时间期间

江衡
2023-03-14

我在将th: field的值解析为类Duration的变量时遇到问题。我想发生的是输入一些数字,我想保存为分钟。

这来自我的HTML文件:

<input type="text" th:field="*{duration}">

在我的对象方面,我只是初始化了变量,如下所示:

@Column(nullable = false)
    private Duration duration;

我得到一个错误网页:

对象“bookingType”的验证失败。错误计数:1个组织。springframework。验证。BindException:组织。springframework。验证。BeanPropertyBindingResult:1 errors字段错误,在字段“duration”上的对象“bookingType”中:拒绝值[15];代码[typeMismatch.bookingType.duration,typeMismatch.duration,typeMismatch.java.time.duration,typeMismatch];参数[org.springframework.context.support.DefaultMessageSourceResolvable:代码[bookingType.duration,duration];参数[];默认消息[持续时间]];默认消息[未能将类型为“java.lang.String”的属性值转换为属性“Duration”的必需类型“java.time.Duration”;嵌套异常为org.springframework.core.convert.ConversionFailedException:未能将类型[java.lang.String]转换为值为“15”的类型[@javax.persistence.Column java.time.Duration];嵌套的异常是java。lang.IllegalArgumentException:对值[15]]的解析尝试失败

我正在使用Bootstrap作为前端,如果它确实重要的话。

我添加了Thymeleaf的java8time额外,尝试将输入类型更改为时间和数字,但我仍然得到相同的错误。

共有1个答案

能钟展
2023-03-14

我通常建议在您的模型和web界面之间创建DTO,这样您可以更自由地移动。

您可以在错误和注释中看到,问题很明显,字符串输入15不是持续时间,无法转换。

如果您的持续时间值是特定类型(分钟、小时..),您可以添加如下自定义转换器:

public class StringToDurationConverter
        implements Converter<String, Duration> {

    @Override
    public Duration convert(String from) {
        return Duration.ofMinutes(
                Long.valueOf(from));
    }
}

我们还需要通过将StringToDurationConverter添加到Formatter注册表来告诉Spring有关这个新转换器的信息。这可以通过实现WebMvcConfigrer并覆盖addFor事项()方法来完成:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringToDurationConverter());
    }
}

我们使用的默认Spring转换器将在每个匹配的源-目标对上应用转换。

如果你想看到有条件的东西:https://stackoverflow.com/a/57539880/2039546

 类似资料:
  • 我有一个字符串时间格式。我没有找到任何格式来解析这个字符串值。有没有办法将这个字符串值转换为Gotime.Time? 编辑 - 这不是重复的问题。我知道如何解析,但我不知道我们可以使用时间格式包中列出的任何布局。这个答案清除了我的涂鸦。

  • 我在Thymeleaf中有一个表单输入字段。字段(下面代码段中的BookingEntry.DateFrom)是类型日期。我使用datepicker来允许用户选择并格式化所需的日期以输入字段。这都没问题。 我确信我可以使用一个以我选择的任何格式初始化的字符串,而不是一个日期类型,但是我想知道是否有一种方法来格式化th:字段中的初始值? 多谢

  • 当我点击前端的一个链接(< code>brandname)时,我需要使用百里叶中的< code>th:href向服务器发送一个请求。为此,我遵循以下代码 和< code>brandname值动态地来自它们各自的< code >对象,但是对于上面的请求,我需要附加额外的内容,为此我尝试了下面的方法

  • 如何将字符串日期格式转换为日期,我有格式为以下格式的日期字符串: 接下来,我尝试了,但没有运气。 所有上述语句都存在解析错误。

  • 问题内容: 如何将下面的日期字符串解析为一个Date对象? 引发异常… 问题答案: 模式是错误的。您有3个字母的天的缩写,因此必须为。您有3个字母的月份缩写,因此必须为。由于这些日和月的缩写对语言环境敏感,因此您也希望将语言环境明确指定为英语,否则它将使用平台默认语言环境,而语言环境本身可能不是英语。 这在这里打印 根据我的时区是正确的。 如果您不想使用代替,我也会重新考虑。阅读javadoc以获