문자열에서 정수로 @Value 주석 유형 캐스팅
값의 출력을 정수로 캐스팅하려고합니다.
@Value("${api.orders.pingFrequency}")
private Integer pingFrequency;
위의 오류가 발생합니다.
org.springframework.beans.TypeMismatchException:
Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer';
nested exception is java.lang.NumberFormatException:
For input string: "(java.lang.Integer)${api.orders.pingFrequency}"
나는 또한 시도했다 @Value("(java.lang.Integer)${api.orders.pingFrequency}")
구글은이 주제에 대해 많이 말하지 않는 것 같다. 이 값이 사용되는 모든 곳에서 구문 분석하는 대신 항상 정수를 처리하고 싶습니다.
해결 방법
해결 방법은 setter 메서드를 사용하여 변환을 실행하는 것임을 알고 있지만 Spring이 할 수 있다면 Spring에 대해 배우고 싶습니다.
다음을 포함하는 클래스 경로에 속성 파일이 있다고 가정합니다.
api.orders.pingFrequency=4
나는 내부에서 시도 @Controller
@Controller
public class MyController {
@Value("${api.orders.pingFrequency}")
private Integer pingFrequency;
...
}
내 서블릿 컨텍스트에 다음이 포함됩니다.
<context:property-placeholder location="classpath:myprops.properties" />
완벽하게 작동했습니다.
따라서 속성이 정수 유형이 아니거나 속성 자리 표시자가 올바르게 구성되지 않았거나 잘못된 속성 키를 사용하고 있습니다.
잘못된 속성 값으로 실행을 시도했습니다 4123;
. 내가 가진 예외는
java.lang.NumberFormatException: For input string: "4123;"
당신 재산의 가치가
api.orders.pingFrequency=(java.lang.Integer)${api.orders.pingFrequency}
나는 인터넷에서 답을 찾고 있었고 다음을 발견했습니다.
@Value("#{new java.text.SimpleDateFormat('${aDateFormat}').parse('${aDateStr}')}")
Date myDate;
따라서 귀하의 경우에는 이것을 시도해 볼 수 있습니다.
@Value("#{new Integer('${api.orders.pingFrequency}')}")
private Integer pingFrequency;
당신은 변환 할 경우 속성을 에 정수 특성 파일에서가 2 개 내가 찾은 솔루션은 :
주어진 시나리오 : customer.properties 는 customer.id = 100 을 필드로 포함 하고 spring 구성 파일에서 integer 로 액세스하려고합니다 . customerId 속성 은 Bean Customer 에서 int 유형으로 선언됩니다 .
해결책 1 :
<property name="customerId" value="#{T(java.lang.Integer).parseInt('${customer.id}')}" />
위의 줄 에서 속성 파일 의 문자열 값은 int 유형으로 변환됩니다 .
솔루션 2 :의 다른 확장 인플레 이스 propeties .FOR 전 약혼자 당신의 재산 파일 이름 인 경우 customer.properties는 다음 만들 customer.details 코드 아래의 구성 파일 사용
<property name="customerId" value="${customer.id}" />
나는 똑같은 상황을 겪었습니다. 이는 Spring 컨텍스트에 PropertySourcesPlaceholderConfigurer 가 없기 때문에 발생하며 @Value
클래스 내부의 주석 에 대한 값을 확인합니다 .
문제를 해결하기 위해 속성 자리 표시자를 포함하고 정수에 Spring 표현식을 사용할 필요가 없습니다 (를 사용하는 경우 속성 파일이 존재하지 않아도 됨 ignore-resource-not-found="true"
).
<context:property-placeholder location="/path/to/my/app.properties"
ignore-resource-not-found="true" />
@Configuation을 사용하는 경우 정적 빈 아래에서 인스턴스화하십시오. 정적이 아닌 경우 @Configutation은 매우 일찍 인스턴스화되고 @Value, @Autowired 등과 같은 어노테이션을 해결하는 BeanPostProcessor는 이에 대해 조치를 취할 수 없습니다. 여기를 참조 하십시오
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
나는 이것을 사용하여 해결 한 동일한 문제가있었습니다. * .properties 파일에 정의 된 int 값을 얻으려면 이 Spring MVC : @Value 주석을 참조하십시오 .
@Value(#{propertyfileId.propertyName})
공장
이 문제는 동일한 파일 이름을 가진 두 개의 리소스가있는 경우에도 발생합니다. 2 개의 다른 jar 또는 클래스 경로 내에 구성된 디렉토리 경로 내에서 "configurations.properties"라고 말하십시오. 예를 들면 :
You have your "configurations.properties" in your process or web application (jar, war or ear). But another dependency (jar) have the same file "configurations.properties" in the same path. Then I suppose that Spring have no idea (@_@?) where to get the property and just sends the property name declared within the @Value annotation.
In my case, the problem was that my POST request was sent to the same url as GET (with get parameters using "?..=..") and that parameters had the same name as form parameters. Probably Spring is merging them into an array and parsing was throwing error.
when use @Value, you should add @PropertySource annotation on Class, or specify properties holder in spring's xml file. eg.
@Component
@PropertySource("classpath:config.properties")
public class BusinessClass{
@Value("${user.name}")
private String name;
@Value("${user.age}")
private int age;
@Value("${user.registed:false}")
private boolean registed;
}
config.properties
user.name=test
user.age=20
user.registed=true
this works!
Of course, you can use placeholder xml configuration instead of annotation. spring.xml
<context:property-placeholder location="classpath:config.properties"/>
ReferenceURL : https://stackoverflow.com/questions/15394351/value-annotation-type-casting-to-integer-from-string
'programing' 카테고리의 다른 글
EC2 인스턴스를 시작하고 각 인스턴스에서 시작 스크립트를 업로드 / 실행하는 방법은 무엇입니까? (0) | 2021.01.15 |
---|---|
치명적 : 빨리 감기 불가능, 중단 (0) | 2021.01.15 |
R : 다중 레이어 ggplot에 대한 사용자 정의 범례 (0) | 2021.01.15 |
명령 줄을 통한 이미지 압축 도구 (0) | 2021.01.15 |
SQL Server Compact는 Visual Studio 2013에서 중단됩니까? (0) | 2021.01.15 |