accessExpirationValue
필드 (표준 getter/setter 메소드 사용)를 보유하고있는 특수 CacheConfig 객체 (java.time.Duration
)를 사용하고 있습니다. (EDIT : 실제로 필드의 형식은 Long (초 수)이지만 getter와 setter의 길이는 Duration입니다.ConversionServiceFactoryBean이 작동하지 않습니다.
이 값을 Spring으로 연결하려고합니다. 초 수와하는 ConversionServiceFactoryBean를 사용하므로 같은 : ApplicationContext.xml에서
관련 콩 :
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean" >
<property name="converters">
<set>
<bean
class="com.tjamesboone.example.config.SecondsToDurationConverter"/>
</set>
</property>
</bean>
<bean id="cacheConfig" class="com.tjamesboone.example.cache.CacheConfig" >
<property name="accessExpirationValue" value="0" />
</bean>
SecondsToDurationConverter :
package com.tjamesboone.example.cache;
import java.time.Duration;
import org.springframework.core.convert.converter.Converter;
public class SecondsToDurationConverter implements Converter<String, Duration> {
@Override
public Duration convert(String seconds) {
return Duration.ofSeconds(Long.parseLong(seconds));
}
}
자, 내가 이해하는 바와 같이,이게 일뿐입니다.입니다. accessExpirationValue
값으로 "0"을 전달할 때 Strings를 Durations로 변환하는 conversionService Bean을 선언했다는 사실은 Duration of zero length로 값을 설정해야 함을 의미합니다.
그러나 이것은 쉽습니다. 그리고 그건.
콩 재산 'accessExpirationValue는'쓸 수 없습니다 또는 잘못된 세터가 있습니다 : 내 응용 프로그램을 (SpringJUnit4ClassRunner 사용) 나는 변환기을 등록하지 않을 것처럼, 내가 ,이 오류가 테스트 할 때 때문에 방법. setter의 매개 변수 유형이 getter의 반환 유형 과 일치합니까?
내 질문은 무엇이 잘못 되었나요? 내가 원하는대로 작동하도록하려면 어떻게해야합니까? 참고로
, 이것은 내가 사용했던 기본 설명서입니다 : https://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html#core-convert-Spring-config
그것은 구체적으로 말한다, Spring 애플리케이션에서
, 일반적으로 Spring 컨테이너 당 ConversionService 인스턴스를 구성 (또는 ApplicationContext). 해당 ConversionService는 Spring에 의해 선택되어 프레임 워크가 유형 변환을 수행해야 할 때마다 사용됩니다.
편집 : 나는 아마도 CacheConfig의 관련 부분을 게시해야한다!
package com.tjamesboone.example.config;
import java.time.Duration;
public class CacheConfig {
private Long accessExpirationValue;
public Duration getAccessExpiration() {
return Duration.ofSeconds(accessExpirationValue.intValue);
}
public void setAccessExpiration() {
this.accessExpirationValue = expirationDuration.getSeconds();
}
}
와우 !!!! 나는 내가 그것을 놓쳤다라고 생각할 수 없다!내 이유는 API가 getter 및 setter와 다른 유형이기 때문에 클래스 자체가 아닌 클래스에 필드 이름에 "Value"가 추가 된 이유라고 생각합니다. ApplicationContext를 업데이트했는데 이제 ** 매력이 생겼습니다 !!!! ** 두 번째 눈 인 Hayes에게 감사드립니다! –