2015-10-29 3 views
-1

Application.yaml:Значение аннотаций не может найти значение, если это число

request.delay.ms: 200 

Пружинный компонент:

@Value("${request.delay.ms}") 
private long requestDelay; 

Теперь, как ни странно это звучит, похоже, весной может успешно разрешить свойство, если это значение является строкой, то есть, если я изменю 200 на 200a. Это вызывает ошибку Caused by: java.lang.NumberFormatException: For input string: "200a", но это ожидается.

Если изменить значение обратно 200 я Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'long'; nested exception is java.lang.NumberFormatException: For input string: "${request.delay.ms}"

И если я бегу в режиме кота отладки и пошагово весеннем код, он отлично работает без ошибок.

Строка @Value (s) разрешена в одном и том же компоненте все время.

+0

Просьба указать минимальный, полный и поддающийся проверке пример. –

+0

Общая догадка: 'request.delay.ms:" 200 "'? –

+0

Это отлично работает для меня. –

ответ

-1

Если вы используете YAML вместо .properties вы должны написать это следующим образом:

request: 
    delay: 
    ms: 200 

, которые будут преобразованы в свойство:

request.delay.ms=200 но вы смесительные оба файла

См. Еще here

+0

Как это объясняет случай op '200a'? –

+0

Прежде всего, в этом фрагменте кода много ошибок. Основная проблема заключается в том, что '$ {request.delay.ms}' никогда не разрешается для реального значения, но всегда разрешается оценивать '' $ {request.delay.ms} "' как 'String', а исключения возникают из-за того, что' ' $ {request.delay.ms} "' не может быть преобразован в 'long', и если он изменяет' requestDelay' на 'String', исключение не возникает, потому что' '$ {request.delay.ms}" 'может быть преобразовано в' String' и значение 'requestDelay' будет' '$ {request.delay.ms}" ' –

+0

, что не помогает. Не заменяя его 'request_delay_ms' – Leo

Смежные вопросы