我是Spring&的新手WebService并在Spring.io上尝试一些指南。 我计划创建一个基本的RESTful WebService,它使用Google Direction API并返回状态。
以下是课程:
资源
@JsonIgnoreProperties(ignoreUnknown=true)
public class Direction {
// getters & setters
public Direction() {
super();
}
private String status;
public String toString() {
return status;
}
}
控制器
@Controller
public class Consumer {
public Consumer() {
super();
}
@Resource
private String url;
@Resource
private RestTemplate client;
@Resource
private String apiKey;
@RequestMapping(value = "/directions", method=RequestMethod.GET)
public @ResponseBody Direction consume(@RequestParam(value="source") String source, @RequestParam(value="destination") String destination) {
return consumeDirections(buildURI(source, destination));
}
// Builds URI
private String buildURI(...) {
...
}
private Direction consumeDirections(final String requestURI) {
return client.getForObject(requestURI, Direction.class);
}
}
配置v1
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Consumer.class, args);
}
}
Springconfig http://pastebin.com/dsNVBWQq
Spring返回没有为依赖项找到类型[java.lang.String]的限定bean。 消费者中的所有bean都会发生这种情况。
然而,这适用于Configuration v2
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
@Resource
private Consumer consumer;
public void execute() {
System.out.println(consumer.consume("x", "z"));
}
public static void main(String[] args) {
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("application-config.xml");
context.getBean(Application.class).execute();
}
}
一些观察
我想了解为什么会出现这个问题以及如何解决这个问题?
答案 0 :(得分:0)
原因很简单,没有加载xml配置。看看Spring-Boot: XML Config
如果您不想触摸现有的xml,则需要另一个@configuration注释类和@ImportResource来加载xml配置,就像文档所说的那样。
IMO,您不需要在配置中使用apiKey和url,您应该使用@value对它们进行注释,并在.properties文件中定义它们。还有弹簧启动的默认设置,您可以充分利用它。比如,命名属性application.properities并将其放在classpath上,spring boot会自动加载它。