我有以下yaml文件
proj:
sms:
gateway:
username: d
password: erer
signature: e
url: http://link.somelink.com
actionKeyMap:
OTP_GENERATOR: Value1
CREATE_USER: Value2
我正在尝试将actionKeyMap / gateway属性绑定到Java映射中,并且它不起作用。
我尝试了以下代码
@Component
@ConfigurationProperties(prefix="proj.sms")
public class MessageResolver {
//@Value("${proj.sms.actionKeyMap}")
private Map<String, String> actionKeyMap;
ConfigurationProperties或Value注释不起作用。
答案 0 :(得分:1)
添加评论中讨论的代码
Application.yml
proj:
sms:
gateway:
username: d
password: erer
signature: e
url: http://link.somelink.com
actionKeyMap:
OTP_GENERATOR: Value1
CREATE_USER: Value2
Spring boot Application.java
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
//@EnableConfigurationProperties
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
MessageResolver.java
package hello;
import java.util.Map;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix="proj.sms")
public class MessageResolver {
//@Value("${proj.sms.actionKeyMap}")
private Map<String, String> actionKeyMap;
@Value("${proj.sms.actionKeyMap.OTP_GENERATOR}")
private String test;
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
public Map<String, String> getActionKeyMap() {
return actionKeyMap;
}
public void setActionKeyMap(Map<String, String> actionKeyMap) {
this.actionKeyMap = actionKeyMap;
}
}
GreetingController.java
package hello;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@Autowired
MessageResolver messageResolver;
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
System.out.println(messageResolver.getTest());
System.out.println(messageResolver.getActionKeyMap());
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
Greeting.java (如果您尝试构建完整的项目)
package hello;
public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
URL http://localhost:8080/greeting
控制台输出(来自GreetingController)(第22和23行,sop)
Value1
{OTP_GENERATOR=Value1, CREATE_USER=Value2}
答案 1 :(得分:0)
您可以通过此链接获取有关如何解决问题的信息:How to inject a Map using the @Value Spring Annotation?
它看起来像:
actionKeyMap: '{
OTP_GENERATOR: "value1",
CREATE_USER: "value2"
}'
答案 2 :(得分:0)
尝试:
(点)的.
(冒号)
@Component
@ConfigurationProperties(prefix="proj:sms")
public class MessageResolver {
@Value("${proj:sms:actionKeyMap}")
private Map<String, String> actionKeyMap;
答案 3 :(得分:0)
您只需要声明if ($slug !== $abc->slug)
和Gateway
类以匹配ActionKeyMap
属性。或者您可以在link上阅读Spring Boot参考。
yml
``
@Component
@ConfigurationProperties(prefix="proj.sms")
public class MessageResolver {
private Gateway gateway;
private ActionKeyMap actionKeyMap;
//getter/setter
}
``
public class Gateway {
private String username;
private String password;
private String signature;
private String url;
//getter/setter
}