我正在尝试为2个服务创建一个资源,1个在application/x-www-form-urlencoded和string payload中,另一个应用程序/ json格式用json body.
我有这个代码:
@POST @Path("/test")
fun test(@Context request: ContainerRequest): Response {
val baos = ByteArrayOutputStream()
request.entityStream.use { it.copyTo(baos) }
val ipnRawData = baos.toString()
var map : Map<String,Any>
map = when (request.headers.getFirst("Content-Type")) {
"application/json" -> objectMapper.convertValue(ipnRawData,Map::class.java) as Map<String,Any>
"application/x-www-form-urlencoded" -> LinkedHashMap()
else -> throw UnsupportedOperationException()
}
//....handle the map
return Response.status(200).build()
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用json选项和body :)运行它时{"name" :"test"},我收到一个错误:
"java.lang.IllegalArgumentException:无法构造java.util.LinkedHashMap的实例:no String-argument构造函数/工厂方法从String值反序列化('{"name":"test"}')"
谢谢你的帮助,Yoel
刚接触 Kotlin,如何找到数字的因数?
例如 24 应该给出 1, 2, 3, 4, 6, 8, 12, 24?
我知道如何使用列表理解来执行此 python,但不确定如何在 Kotlin 中正确执行此操作。
我正在用kotlin迈出第一步.
我正在将一些现有的Java代码迁移到kotlin.
我有以下几点:
storyDate.ifPresent(article::setPublishDate);
Run Code Online (Sandbox Code Playgroud)
其中storyDate是一个Optional并且文章有一个方法setPublishDate(Date)方法.
我如何将此行迁移到kotlin?
https://try.kotlinlang.org上的自动迁移器是
storyDate.ifPresent(Consumer<Date>({ article.setPublishDate() }))
Run Code Online (Sandbox Code Playgroud)
但是这行不能用kotlin编译器编译.
我使用 lib jackson-module-kotlin 将 json 字符串解析为对象。
我的问题是,当我将字符串解析为 enum 时,当我使用 intellij 启动时,我有以下堆栈跟踪:
引起原因:kotlin.reflect.jvm.internal.KotlinReflectionInternalError:尚未完全支持内置 Kotlin 类型的反射。未找到公共最终 val 名称的元数据:kotlin.Enum[DeserializedPropertyDescriptor@212b316a] 中定义的 kotlin.String
我用maven启动的时候没有这个问题。
我使用 kotlin 1.1.51,使用 intellij kotlin 插件 1.2.0-release-IJ2017.3-1,我的目标是 JVM 1.8,我使用 jackson-module-kotlin 版本 2.8.7
我应该怎么办?
enum class CType { DEAL, FILE }
data class Code(val code: String, val type: CType)
fun testDeserialization() {
val mapper = jacksonObjectMapper()
// following line throws an exception:
mapper.readValue("""{"code":"A","type":"DEAL"}""", Code::class.java)
}
Run Code Online (Sandbox Code Playgroud) 我试图通过检查它在Java方面的外观来了解Kotlin的一些功能.
所以作为一个实验,我尝试了这个:
val printKotlin = fun () {
print("Hello Kotlin")
}
Run Code Online (Sandbox Code Playgroud)
所以上面代码片段的输出是:
public final class FunAsVariableKt {
private static final Function0 printKotlin;
public static final Function0 getPrintKotlin() {
return printKotlin;
}
static {
printKotlin = (Function0)null.INSTANCE;
}
}
Run Code Online (Sandbox Code Playgroud)
我如何理解上面反编译代码的静态块?为什么它会生成这个非工作代码?
以下是一些打印任何语句或语句块的执行时间的kotlin代码:
fun exeTime(code: () -> Unit) {
var start = System.currentTimeMillis()
code()
var end = System.currentTimeMillis() - start
println("Execution time: " + end + "ms")
}
Run Code Online (Sandbox Code Playgroud)
它可以这样使用:
exeTime {
// some code
// ...
}
Run Code Online (Sandbox Code Playgroud)
Java 中exeTime函数的等效构造是什么?