我很高兴使用@Value
将命令行参数注入基于Spring Boot CommandLineRunner的程序。即。
java -jar myJar.jar --someParm=foo
...适用于包含以下内容的类
@Autowired
public MyBean(@Value("someParm") String someParm) { ... }
但是,当parm不是String时,我现在看到这个失败。
这是我的豆子:
@Component
class MyBean {
private final LocalDate date;
@Autowired
public MyBean (@Value("date") @DateTimeFormat(iso=ISO.DATE) LocalDate date) {
this.date = date;
}
public void hello() {
System.out.println("Hello on " + date);
}
}
...和我的申请类:
@SpringBootApplication
public class MyApp implements CommandLineRunner {
@Autowired
private MyBean myBean;
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
@Override
public void run(String... args) throws IOException {
myBean.hello();
}
}
当我以java -jar MyApp.java --date=2016-12-10
运行它时,我得到一个堆栈跟踪结束:
java.lang.IllegalStateException: Cannot convert value of type
[java.lang.String] to required type [java.time.LocalDate]:
no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:302)
虽然文档说明了String-> Date的标准转换器,但我已尝试注册我自己的,并且点击与此帖子相同的NullPointerException:How to register custom converters in spring boot?
我可以做些什么来完成这项工作?
Java 8,Spring Boot 1.3.5-RELEASE
答案 0 :(得分:0)
您是否尝试使用java.util.Date
代替java.time.LocalDate
?我怀疑转换会自动生效。
答案 1 :(得分:0)
通常(当使用@EnableWebMvc
或类似的东西时)Spring自动注册转换服务,但是有些情况(例如命令行应用程序),你应该手动注册它:
@Bean
public static ConversionService conversionService() {
return new DefaultFormattingConversionService();
}