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

不能在Spring Boot中使用java.util.Duration作为@value配置

何兴学
2023-03-14

我们不能在Spring Boot中使用java.util.Duration作为@value配置。

在此处显示此问题的示例项目:https://github.com/costimuraru/spring-boot-sample Spring Boot version:1.5.9.release

@RestController
public class HelloController {

    @Value("${mykey}")
    Duration value;

    @RequestMapping("/")
    public String index() {
        return "Greetings at " + value;
    }

}

...

public class MyConfigPropertySource extends PropertySource {

    MyConfigPropertySource(String name) {
        super(name);
    }

    @Override
    public Object getProperty(String path) {
        return "mykey".equals(path) ? Duration.ofMinutes(1) : null;
    }
}

此错误完全是意外的:找不到能够将类型[java.time.duration]转换为类型[java.lang.string]的转换器。我们既没有在@value字段中使用字符串,也没有在PropertySource的return语句中使用字符串。那么为什么Spring Boot要尝试将其转换为字符串呢?任何帮助我们都很感激。

共有1个答案

司空兴为
2023-03-14

只需使用Spring表达式语言

@Value("#{T(java.time.Duration).parse('${mykey}')}")
private Duration value;
 类似资料:
  • 本文向大家介绍Springboot中@Value的使用详解,包括了Springboot中@Value的使用详解的使用技巧和注意事项,需要的朋友参考一下 Springboot通过@Value注解将配置文件中的属性注入到容器内组件中(可用在@Controller、@Service、@Configuration、@Component等Spring托管的类中)  1.普通字符串注入 例:yml中存在key

  • 我正在尝试使用Mockito在SprinBoot应用程序中进行一些jUnit测试。 现在我的服务有了一些变量,可以从通过注释: 我试图通过像这样使用来测试这个: 但是,该属性不会被填充,并保持为。 这方面有很多TPOIC,但我还没能拼凑出一个解决方案。我看到解决方案建议,但它似乎想做一个集成测试,使服务加速,但由于无法连接到数据库,服务失败了。所以这不是我想要的。 我还看到一些解决方案建议我制作一

  • 请建议如何解决这个问题。我被困在这里了。 下面是错误信息; null

  • 我正在将Spring Boot从1.3升级到1.5。对于升级到1.5,我已经替换了 还有,我在用

  • 我有一个两个Spring Boot应用程序。一个是进行rest调用的rest客户端。另一个只有Restendpoint的应用程序。 当rest客户机到达Restendpoint时,它会失败。 这是用于命中restendpoint的代码: 这是客户端尝试访问的其余endpoint: 这是我在带有restendpoint的应用程序中看到的错误: 为什么 Rest 调用适用于邮递员而不是我的 rest

  • 问题内容: 我正在尝试通过符合协议的编码模型来获取数据。但是它无法像下面的代码那样调用func : 但是在另一个演示中,效果很好,为什么呢? 问题答案: 解决方案1。 https://github.com/satishVekariya/SVCodable 试试这个代码,它扩展了可编码 解决方案2。 避免污染带有扩展名的Apple提供的协议 用