Как передать и разобрать JSON для автономной загрузки с весенней загрузкой?
Например:
java -jar mySpringApplication --myJsonParameter="{\"myKey\":\"myValue\"}"
Это должно быть решено так:
public class MyService {
@Autowired
//or @Value("myJsonParameter") ?
private MyInputDto myInputDto;
}
public class MyInputDto {
private String myKey;
}
Идея состоит в том, чтобы передать именованный параметр из командной строки (и следуя практическим методам внешней экранизации), но ввести значение Typed, анализируемое из json, а не string.
2 ответа
Вы можете попробовать использовать свойство 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.
Вы можете реализовать CommandLineRunner
to your springboot main class and then prepare Bean
как это:
@Bean
public MyInputDto prepareMyInputDto(){
return new MyInputDto();
}
Тогда в вашем run
method you can set values from command line argument.
@Override
public void run(String... args) throws Exception {
MyInputDto bean = context.getBean(MyInputDto.class);
bean.setMyKey(args[0]);
}