【问题标题】: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]);
      }
      

      【讨论】:

        猜你喜欢
        • 2016-07-04
        • 2019-09-08
        • 1970-01-01
        • 2023-01-25
        • 2018-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多