2016-06-08 5 views
2

Я с радостью использовал @Value для ввода параметров командной строки в программы Spring Boot CommandLineRunner. т.е.Преобразование типа в Spring Boot CommandLineRunner app

java -jar myJar.jar --someParm=foo 

... прекрасно работает с классами, содержащими:

@Autowired 
public MyBean(@Value("someParm") String someParm) { ... } 

Однако я сейчас наблюдаем это терпеть неудачу, когда PARM не является строкой.

Вот мой боб:

@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, я экспериментировал с registeri ng my own, и ударил тот же NullPointerException как этот пост: How to register custom converters in spring boot?

Что я могу сделать, чтобы сделать эту работу?

Java 8, Spring Загрузочный 1.3.5-RELEASE

ответ

0

ли вы попробовать использовать java.util.Date вместо java.time.LocalDate? Я подозреваю, что преобразование будет работать автоматически.

+0

Я попытался это - то же исключение, кроме типа. – slim

0

Обычно (при использовании @EnableWebMvc или что-то в этом роде) Spring регистрирует услугу преобразования автоматически, но бывают ситуации (например, приложение командной строки), когда вы должны зарегистрировать его вручную:

@Bean 
public static ConversionService conversionService() { 
    return new DefaultFormattingConversionService(); 
}