【问题标题】:How pass and parse json to spring boot standalone application?如何将 json 传递和解析到 Spring Boot 独立应用程序?
【发布时间】:2018-06-05 07:49:29
【问题描述】:
例如:
java -jar mySpringApplication --myJsonParameter="{\"myKey\":\"myValue\"}"
应该这样解决:
public class MyService {
@Autowired
//or @Value("myJsonParameter") ?
private MyInputDto myInputDto;
}
public class MyInputDto {
private String myKey;
}
这个想法是从命令行传递命名参数(并遵循 spring 外部化实践),但注入从 json 解析的 Typed 值,而不是字符串。
【问题讨论】:
标签:
java
spring
spring-boot
jackson
string-externalization
【解决方案1】:
您可以尝试使用属性spring.application.json 并将您的MyInputDto 注释为@org.springframework.boot.context.properties.ConfigurationProperties。
像这样启动你的应用程序:
java -Dspring.application.json='{"myKey":"myValue"}' -jar mySpringApplication.jar
实施您的服务:
@EnableConfigurationProperties(MyInputDto.class)
public class MyService {
@Autowired
private MyInputDto myInputDto;
// use myInputDto.getMyKey();
}
@ConfigurationProperties
public class MyInputDto {
private String myKey;
public String getMyKey() { return this.myKey; }
public void setMyKey(String myKey) { this.myKey = myKey; }
}
更多信息请参见Spring external configuration documentation。
【解决方案2】:
你可以在你的springboot主类中实现CommandLineRunner,然后像这样准备Bean:
@Bean
public MyInputDto prepareMyInputDto(){
return new MyInputDto();
}
然后在您的 run 方法中,您可以从命令行参数设置值。
@Override
public void run(String... args) throws Exception {
MyInputDto bean = context.getBean(MyInputDto.class);
bean.setMyKey(args[0]);
}