[SPRING] Scala.Option을위한 Spring RequestParam 포매터
SPRINGScala.Option을위한 Spring RequestParam 포매터
우리는 스칼라 어플리케이션에서 Spring MVC를 사용하고 있으며 @RequestParam을 사용하여 스칼라 옵션을 적절하게 변환 할 수 있도록 스칼라 옵션의 unwrap 방법을 알고 싶습니다. 나는이 솔루션이 Formatter SPI와 관련이있을 것이라고 생각하지만 Option의 값을 여러 개 가질 수 있다는 점을 감안할 때 이것이 잘 작동하도록하는 방법을 확신 할 수 없다. (스프링이 정상적으로 처리되기를 바란다. 변환 된 값 전혀 옵션이 아니었다). 본질적으로, 나는 평상시의 변환이 끝나면 Option wrapped가되는 값의 추가 변환을 거의 적용하고 싶다.
예를 들어, 다음 코드가 주어집니다 :
@RequestMapping(method = Array(GET), value = Array("/test"))
def test(@RequestParam("foo") foo: Option[String]): String
url / test? foo = bar는 foo 매개 변수의 값이 Some ( "bar")가되어야 함을 의미하는 반면, url / test는 foo 매개 변수의 값을 None으로 지정해야합니다 (/ test? foo는 빈 문자열 또는 없음).
해결법
-
==============================
1.우리는 AnyRef to Option [AnyRef] 변환기를 생성하고 이것을 Spring MVC의 ConversionService에 추가함으로써 이것을 해결할 수 있었다.
우리는 AnyRef to Option [AnyRef] 변환기를 생성하고 이것을 Spring MVC의 ConversionService에 추가함으로써 이것을 해결할 수 있었다.
import org.springframework.beans.factory.annotation.{Autowired, Qualifier} import org.springframework.core.convert.converter.ConditionalGenericConverter import org.springframework.core.convert.converter.GenericConverter.ConvertiblePair import org.springframework.core.convert.{ConversionService, TypeDescriptor} import org.springframework.stereotype.Component import scala.collection.convert.WrapAsJava /** * Base functionality for option conversion. */ trait OptionConverter extends ConditionalGenericConverter with WrapAsJava { @Autowired @Qualifier("mvcConversionService") var conversionService: ConversionService = _ } /** * Converts `AnyRef` to `Option[AnyRef]`. * See implemented methods for descriptions. */ @Component class AnyRefToOptionConverter extends OptionConverter { override def convert(source: Any, sourceType: TypeDescriptor, targetType: TypeDescriptor): AnyRef = { Option(source).map(s => conversionService.convert(s, sourceType, new Conversions.GenericTypeDescriptor(targetType))) } override def getConvertibleTypes: java.util.Set[ConvertiblePair] = Set( new ConvertiblePair(classOf[AnyRef], classOf[Option[_]]) ) override def matches(sourceType: TypeDescriptor, targetType: TypeDescriptor): Boolean = { Option(targetType.getResolvableType).forall(resolvableType => conversionService.canConvert(sourceType, new Conversions.GenericTypeDescriptor(targetType)) ) } }
from https://stackoverflow.com/questions/33771485/spring-requestparam-formatter-for-scala-option by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 jms를 사용하여 주제를 듣는 법 (0) | 2019.04.12 |
---|---|
[SPRING] RestTemplate을 사용한 기본 인증 - 컴파일 오류 - 생성자 HttpClient ()가 표시되지 않습니다. (0) | 2019.04.12 |
[SPRING] 내 logback 자바 기반 (no xml) 구성이 무시됩니다. (0) | 2019.04.12 |
[SPRING] spring mvc를 사용하여 webapp / resources / images 디렉토리에 이미지를 업로드하는 방법은 무엇입니까? (0) | 2019.04.12 |
[SPRING] Flux <DataBuffer>를 올바르게 읽고 단일 inputStream으로 변환하는 방법 (0) | 2019.04.12 |