Как передать и разобрать 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]);
}
Другие вопросы по тегам