Nit*_*tal 5 java rest spring spring-mvc spring-boot
我无法通过 Spring Boot 从属性文件中读取属性。我有一个 REST 服务,它通过浏览器和邮递员工作,并向我返回一个有效的 200 响应数据。
但是,我无法使用 @Value 注释通过此 Spring Boot 客户端读取属性并获得以下异常。
例外:
helloWorldUrl = null
Exception in thread "main" java.lang.IllegalArgumentException: URI must not be null
at org.springframework.util.Assert.notNull(Assert.java:115)
at org.springframework.web.util.UriComponentsBuilder.fromUriString(UriComponentsBuilder.java:189)
at org.springframework.web.util.DefaultUriTemplateHandler.initUriComponentsBuilder(DefaultUriTemplateHandler.java:114)
at org.springframework.web.util.DefaultUriTemplateHandler.expandInternal(DefaultUriTemplateHandler.java:103)
at org.springframework.web.util.AbstractUriTemplateHandler.expand(AbstractUriTemplateHandler.java:106)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:612)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:287)
at com.example.HelloWorldClient.main(HelloWorldClient.java:19)
Run Code Online (Sandbox Code Playgroud)
HelloWorldClient.java
public class HelloWorldClient {
@Value("${rest.uri}")
private static String helloWorldUrl;
public static void main(String[] args) {
System.out.println("helloWorldUrl = " + helloWorldUrl);
String message = new RestTemplate().getForObject(helloWorldUrl, String.class);
System.out.println("message = " + message);
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序属性
rest.uri=http://localhost:8080/hello
Run Code Online (Sandbox Code Playgroud)
您的代码中有几个问题。
从您发布的示例来看,Spring 似乎还没有开始。主类应该在您的主方法中运行上下文。
@SpringBootApplication
public class HelloWorldApp {
public static void main(String[] args) {
SpringApplication.run(HelloWorldApp.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)无法将值注入静态字段。您应该首先将其更改为常规类字段。
该类必须由 Spring 容器管理才能使值注入可用。如果您使用默认组件扫描,您可以简单地使用 @Component 注释来注释新创建的客户端类。
@Component
public class HelloWorldClient {
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您不想注释该类,您可以在您的配置类之一或您的主要 Spring Boot 类中创建一个 bean。
@SpringBootApplication
public class HelloWorldApp {
// ...
@Bean
public HelloWorldClient helloWorldClient() {
return new HelloWorldClient();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您是班级的所有者,则首选第一个选项。无论您选择哪种方式,目标都是让 Spring 上下文知道类的存在,以便注入过程可以发生。
| 归档时间: |
|
| 查看次数: |
3090 次 |
| 最近记录: |