I am currently working on a Scala application which utilizes Spring-Boot and Swagger to send & receive REST-calls.
Swagger and Spring-Boot are pure Java-projects and have limited compatibility with Scala, but I seem to have found a workaround regarding the problem.
Since Spring-Boot and Swagger are handling requests as Java objects (which needs setters & getters to work), I'll have to treat the request as a Java object and convert the request to later. This is a very simplified version of what I did:
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")
}
OUTPUT
Test 1 = Params(false,true)
Test 2 = Params(true,true)
Test 3 = Params(false,false)
Test 4 = Params(false,false)
Test 5 = Params(false,true)
OK... my question is:
Is there an easier & more readable way of achieving this? Do I have to call ParamsAsJava.toScala each time or is there some awesome Scala way of doing this?