我目前正在开发一个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)
好吧…我的问题是:
有没有更简单,更易读的方式来实现这一目标?我是否必须每次都调用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()
,该方法没有副作用。在我的项目中,我有一个Akka层,它返回一个,接收Future的部分是Java风格。 团队中的人不了解Scala,他们宁愿使用,因为他们更了解Java 8 API。 有没有什么好方法可以将一个转换成一个?。 显然是以非阻塞的方式。 当做
我有一些scala代码是我用IntelliJ和SBT-Plugin编写的,希望提供给我作为C++的DLL的代码。 我已经尝试过使用'ikvmc':我通过'package'将所有类打包在一个jar中。之后,我手动设置了一个jar,其中包含我使用的所有依赖项(scala-library、scama、jamtio、jama)。不幸的是,我得到了很多警告:'IKVMC0119'、“Emitted java
我试图从Scala类创建一个Dll。我正在使用IntelliJ和SBT。我已经找到了一种使用ikvm-converter将.jar文件转换为Dll的方法。现在的问题是:当我在SBT下使用“package”从我的.scala文件中创建一个.jar文件,然后尝试用ikvmc将其转换为Dll时,结果库在集成到C#中时是空的... 向你问好Christoph
我有一个有30多个字符串的列表。如何将list转换为dataframe?我所尝试的:
问题内容: 我需要在Java中实现一个返回Scala的方法。 但是我遇到这个错误: 到目前为止,这是我的代码: 但似乎没有提供将其转换为的可能性。 问题答案: 我需要JavaConverters来解决这个问题。
参考[Stackoverflow]Scala:将map转换为case类我尝试复制其中一个响应,我看到以下错误: <代码>无法构造com的实例。实践斯卡拉。Test“(不存在任何创建者,如默认构造):无法从[源:未知;行:-1,列:-1]处的对象值(无委托或基于属性的创建者)反序列化 代码: 这个错误说明了什么?我错过了什么吗?