在我的项目中,我使用的是 Spring + Scala。
我的一些 Spring MVC Controller 使用 Spring 功能将传入的 HTTP 参数绑定(bind)到 DTO 对象。像这样:
@RequestMapping(value = Array("/", ""), method = Array(RequestMethod.POST))
def saveProduct(dto: MyDto): Iterable[MyDto] = {...}
MyDto
是简单的 Scala 类:
class MyDto extends Serializable {
@BeanProperty var id : Long = _
@BeanProperty var name: String = _
}
我的问题是,当我尝试对 MyDto
中的字段使用 Scala Option
类时出现异常:
class MyDto extends Serializable {
@BeanProperty var id : Option[Long] = None
@BeanProperty var name: Option[String] = None
}
异常信息是:
无法将类型“java.lang.String”的属性值转换为属性“name”所需的类型“scala.Option”;
如果 MyDto
中的字段,我可以做些什么来使用 Scala 选项作为类型?
最佳答案
我不是 Scala 专家,但这是一种方法:
按照以下思路创建一个转换器:
import org.springframework.core.convert.converter.Converter
class TypeToOptionOfTypeConverter[T] extends Converter[T, Option[T]] {
override def convert(source: T): Option[T] = {
Some(source)
}
}
用 Spring MVC 注册这个转换器:
class WebConfig extends WebMvcConfigurerAdapter {
override def addFormatters(registry: FormatterRegistry): Unit = {
registry.addConverter(classOf[String], classOf[Option[String]], new TypeToOptionOfTypeConverter[String])
registry.addConverter(classOf[Long], classOf[Option[Long]], new TypeToOptionOfTypeConverter[Long])
}
}
应该是这样,现在您的 DTO 应该得到清晰的映射。
关于spring - 在 Spring MVC 中使用 Scala 类作为 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29377191/