我正在尝试创建一个简单的Spring Boot应用程序,该应用程序将名称作为URL中的参数(例如http://localhost:8080/hello/john)并使用英语或德语问候页面打招呼("你好John"或者#34; Hallo John")。
我在Ubuntu 14.04下使用IntelliJ Idea 2017.3.3。
为此,我创建了一个Spring Intializr项目,以及一个名为GreetingService的接口:
package com.springboot.configuration.service;
import org.springframework.stereotype.Component;
@Component
public interface GreetingService {
String sayHello(String name);
}
此接口将在两个类中实现,GrretingServiceEnglish和GreetingServiceGerman,如下所示:
package com.springboot.configuration.service;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
@Component
@Profile("english")
public class GreetingServiceEnglish implements GreetingService{
@Override
public String sayHello(String name) {
return "Hello " + name;
}
}
和
package com.springboot.configuration.service;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
@Component
@Profile("german")
public class GreetingServiceGerman implements GreetingService{
@Override
public String sayHello(String name) {
return "Hallo " + name;
}
}
要选择必须使用哪一个,在application.properties中有一个条目:
spring.profiles.active="english"
在控制器中我进行自动装配:
package com.springboot.configuration.controller;
import com.springboot.configuration.service.GreetingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(path = "/", method = RequestMethod.GET)
public class GreetingController {
@Autowired
private GreetingService greetingService;
@RequestMapping(path = "hello/{name}")
public String sayHello(@PathVariable(name = "name") String name){
return greetingService.sayHello(name);
}
}
申请表是:
package com.springboot.configuration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProfilesApplication {
public static void main(String[] args) {
SpringApplication.run(ProfilesApplication.class, args);
}
}
当我运行应用程序时出现错误:
com.springboot.configuration.controller.GreetingController中的字段greetingService需要一个类型为' com.springboot.configuration.service.GreetingService'的bean。无法找到。
出了什么问题?你能帮帮我吗?
答案 0 :(得分:1)
您的有效个人资料设置不正确 - 您不会在application.properties
文件中引用字符串。在这种情况下,您的活动配置文件实际上是“"英语"”。如果使用以下命令注释组件类,则可以。
@Profile("\"english\"")
您可以在控制台日志中看到它:
2018-01-18 10:43:51.322 INFO 23212 --- [ main] c.s.configuration.ProfilesApplication : The following profiles are active: "english"
只需在spring.profiles.active
application.properties
即可
spring.profiles.active=english
它将按预期工作。
2018-01-18 10:47:31.155 INFO 890 --- [ main] c.s.configuration.ProfilesApplication : The following profiles are active: english
我想这个项目只是测试Spring Boot功能的一个游乐场(比如配置文件等)。如果您有兴趣将应用程序国际化,请使用LocaleChangeInterceptor
使用messages_en.properties
+ messages_de.properties
来定义您的翻译并在单个组件中使用它们。你可以在这里找到一个很好的介绍:http://www.baeldung.com/spring-boot-internationalization