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

UriComponentsBuilder不展开@Value属性

陈志
2023-03-14

我正在尝试从属性文件应用程序合成Url。yml如下所示:

service:
  url: http://localhost:8081/rest/change/age

我有一个像下面这样的调度程序:

@Component
public class AScheduler {

private static final Logger logger = LoggerFactory.getLogger(AScheduler.class);

private String serviceUrl;

private final RestTemplate restTemplate;

HttpHeaders headers = new HttpHeaders();
HttpEntity<?> httpEntity = new HttpEntity<>(headers);

public AScheduler(RestTemplateBuilder restTemplateBuilder,
                     @Value("{service.url}") String serviceUrl) {
    this.restTemplate = restTemplateBuilder.build();
    this.serviceUrl = serviceUrl;
}

 @Scheduled(fixedRate = 30 * 1000)
public void invoke() {
    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(serviceUrl);
    ResponseEntity<JsonNode> jsonResponse = (ResponseEntity<JsonNode>) getRestResponseFromUriString(builder.toUriString(),
            JsonNode.class);
}

我一直得到以下例外情况:

java.lang.IllegalArgumentExcoop:[{service.url}]不是一个有效的HTTP URL在org.springframework.web.util.UriComponentsBuilder.fromHttpUrl(UriComponentsBuilder.java:290)~[sping-web-5.0.9。发布. jar: 5.0.9。发布]在com.salesforce.fire.adcl.scheduler.AScheduler.invoke(AScheduler.java:47)~[类/: na]在sun.reflect.NativeMEDAccessorImpl.invoke0(本地方法)~[na: 1.8。0_152]在sun.reflect.NativeMEDAccessorImpl.invoke(NativeMeodAccessorImpl.java:62)~[na: 1.8.0_152]在sun.reflect.委托mpl.invoke(委托mpl.java:43)~[na: 1.8.0_152]在java.lang.reflect.Method.invoke(Method.java:498)~[na:1.80_152]在org.springframework.scheduling.support.schduledMEDRunnable. run(schduledMEDRunnable. java: 84)~[spaming-extage-5.0.9。发布. jar: 5.0.9。发布]在org. springframework.调度. support。委托错误处理Runnable. run(委托错误处理Runnable. java: 54)~[spaming-encage-5.0.9。发布. jar: 5.0.9。[发布]在java. util. con当前。执行者$RunnableAdapter. call(Executors. java: 511)[na: 1.8。0_152]在java. utilt.并发。FutureTasks. runAndReset(FutureTasks. java: 308)[na: 1.8.0_152]at java. util. con当前。[na: 1.8.0_152]在java. utill.同时。[na: 1.8。0_152]在java. util. con电流。ThreadPoolExecutor. runWorker(ThreadPoolExecutor. java: 1149)[na: 1.8.0_152]在java. util. con电流。线程池执行器$Worker. run(ThreadPoolExecutor. java: 624)[na: 1.8.0_152]在java. lang。Thread. run(Thread. java: 748)[na: 1.8.0_152]

我尝试了buildAndExpand()和许多其他组合组件的方法。但我无法在建筑商中使用该物业。有没有一种方法可以从属性文件中使用UrlComponentsBuilder编写Url

共有1个答案

仇航
2023-03-14

您在@值的SpEL中犯了一个错误。您必须以以下格式写入属性名称:${property.name}

所以改变吧

@Value("{service.url}") String serviceUrl 

@Value("${service.url}") String serviceUrl

 类似资料:
  • 我正在为邮件服务配置创建一个组件 我的邮件属性文件看起来像 我试图获取端口值,但遇到了问题 是的,我知道这应该是一个整数值,但我的@Value注释已将**转换为字符串。所以我试了这个: ...一样的。 主机、用户名、密码等。装得好好的!如何获取我的端口值?为什么PropertySource没有自动转换这个参数?

  • 问题内容: angularjs模板中的和属性之间有什么区别?如果我在使用value属性的字段上使用它,则它正常工作,但是如果我将该属性更改为它,它将停止工作。 问题答案: 根据 文档 ,采用 “角表达式,其值将绑定到 元素的属性”。 因此,当您使用时,它将被解释为一个表达式,并且被绑定到(可能是)。 对于评估表达式很有用- 与设置硬编码值相比没有优势。但是,如果您想使用硬编码值,则必须将其包含在:

  • 问题内容: 尝试在Spring 3.0.5.RELEASE中自动将属性连接到Bean ,我正在使用: config.properties: main-components.xml: MyClass: 结果,username被设置为字面值 ,因此表达式不会被解析。我对该类的其他自动关联依赖关系已设置,并且Spring不会引发任何异常。我也尝试添加,但没有帮助。 如果我将属性解析为单独的bean,然后

  • 我们一直在使用Spring@Value注释来注入属性值。我们有一个约定来命名属性名称,以匹配它们注入的java字段。这带来了不必要的工作,即每个ConfigBean的java字段都需要用@Value注释。 我正在寻找一种方法,用新的注释注释java类(比如说ConfigBean),让一些后处理器读取这些bean的属性名称,并自动注入属性值。 我正在寻找一些关于如何在没有@Value注释的情况下实现

  • 我正在使用typescript,并试图创建一个脚本,当文本输入到输入框中时,该脚本将更新p元素。 然而,编译器确实输出了一个javascript文件,这在Chrome中工作得很好。 我怎么会有这个错误?那我该怎么修呢? 另外,根据TypeScript,在哪里可以查找上哪些属性是有效的? 请注意,我对javascript和typescript非常陌生,所以我可能会遗漏一些显而易见的东西。:)