Initially, I have the following spec:
@Value("#{props.isFPL}") private boolean isFPL=false;
This works fine correctly getting the value from the property file:
isFPL = true
However, the following expression with default results in the error:
@Value("#{props.isFPL:false}") private boolean isFPL=false;
Expression parsing failed; nested exception is org.springframework.expression.spel.SpelParseException: EL1041E:(pos 28): After parsing a valid expression, there is still more data in the expression: 'colon(:)'
I also tried to use $ instead of #.
@Value("${props.isFPL:true}") private boolean isFPL=false;
Then the default value in annotation works fine but I did not get the correct value from the Properties file:
To set a default value for primitive types such as boolean and int, we use the literal value: @Value("${some. key:true}") private boolean booleanWithDefaultValue; @Value("${some.
Spring @Value annotation is used to assign default values to variables and method arguments. We can read spring environment variables as well as system variables using @Value annotation. Spring @Value annotation also supports SpEL.
By default, @RequestParam requires query parameters to be present in the URI. However, you can make it optional by setting @RequestParam 's required attribute to false . In the above example, the since query param is optional: @RequestParam(value="since", required=false) ).
@Value is a Java annotation that is used at the field or method/constructor parameter level and it indicates a default value for the affected argument. It is commonly used for injecting values into configuration variables - which we will show and explain in the next part of the article.
Try with $
as follows:
@Value("${props.isFPL:true}") private boolean isFPL=false;
Also make sure you set the ignore-resource-no-found
to true so that if the property file is missing, the default value will be taken.
Place the following in the context file if using XML based configuration:
<context:property-placeholder ignore-resource-not-found="true"/>
If using Java configurations:
@Bean public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { PropertySourcesPlaceholderConfigurer p = new PropertySourcesPlaceholderConfigurer(); p.setIgnoreResourceNotFound(true); return p; }
For int
type variable:
@Value("${my.int.config: #{100}}") int myIntConfig;
Note: there is no space before the colon, but an extra space after the colon.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With