我目前正在开发一个Scala应用程序,该应用程序利用Spring-Boot和Swagger发送和接收REST调用。
Swagger和Spring-Boot是纯Java项目,与Scala的兼容性有限,但是我似乎找到了解决该问题的方法。
由于Spring- Boot和Swagger将请求作为Java对象处理(需要使用setter和getter才能工作),因此我必须将请求视为Java对象,然后将请求转换为更高版本。这是我所做的工作的非常 简化的版本 :
case class ParamsAsJava(includeMovies: java.lang.Boolean = java.lang.Boolean.FALSE, includeTvShows: java.lang.Boolean = java.lang.Boolean.FALSE) { def toScala(): Params = { Params( includeMovies = convertToScala(includeMovies), includeTvShows = convertToScala(includeTvShows) ) } private def convertToScala(test: java.lang.Boolean): Boolean = if (test == null) false else test.booleanValue } case class Params(includeMovies: Boolean = false, includeTvShows: Boolean = false) object Application extends App { val test1 = ParamsAsJava(java.lang.Boolean.FALSE, java.lang.Boolean.TRUE).toScala val test2 = ParamsAsJava(java.lang.Boolean.TRUE, java.lang.Boolean.TRUE).toScala val test3 = ParamsAsJava().toScala val test4 = ParamsAsJava(null, null).toScala val test5 = ParamsAsJava(null, java.lang.Boolean.TRUE).toScala println(s"Test 1 = $test1") println(s"Test 2 = $test2") println(s"Test 3 = $test3") println(s"Test 4 = $test4") println(s"Test 5 = $test5") }
输出值
测试1 =参数(false,true) 测试2 =参数(true,true) 测试3 = Params(false,false) 测试4 = Params(false,false) 测试5 = Params(false,true)
测试1 =参数(false,true)
测试2 =参数(true,true)
测试3 = Params(false,false)
测试4 = Params(false,false)
测试5 = Params(false,true)
好吧…我的问题是:
有没有更简单,更易读的方式来实现这一目标?我是否必须每次都调用ParamsAsJava.toScala或是否有一些 很棒的 Scala方法来做到这一点?
java.lang.blah
ParamsAsJava(java.lang.Boolean.FALSE, java.lang.Boolean.TRUE)
只需使用
ParamsAsJava(false, true)
代替。自动装箱一直没有到位。
toScala
Params
object Params {
implicit def params_j2s(p: ParamsAsJava): Params = p.toScala() }
现在您可以写:
val test1: Params = ParamsAsJava(true, false)
当然,如果您不是在真空中定义此变量,而是将其传递给方法,则将自动推断出正确的类型,并且将隐式转换对象。
()
def toScala()