我正在尝试关注this Spark tutorial to create a REST API using Kotlin,而我正在努力在JSON主体上发布数据
我想将数据发布到正文中,如下所示:
curl -H "Content-Type: application/json" -X POST -d '{"token" : "eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vdHJ1c3R5YXBwLmNvbS8iLCJzdWIiOiJ1c2Vycy8xMzAwODE5MzgwIiwiZXhwIjoxNDg5OTgwNTI2fQ.5ZJG9GyhG-OCXg0C510MBFs9EQHdE909s4hpNxnM6LU"}' http://localhost:4567/tokens
然而,这将在我的Kotlin文件中得到一个空值,第20行
/**
* REST API for getting tokens
* Created by juanma on 15/3/17.
*/
import spark.Spark.get
import spark.Spark.post
import spark.Spark.*
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
fun main(args: Array<String>) {
get("/hello") { req, res -> "Hello World" }
path("/tokens") {
get("") { req, res ->
createToken()
}
// TODO check this instead, so I can get the params from the body
// https://stackoverflow.com/a/30113863/3923525
post("") { req, res ->
val token = req.queryParams("token")
val verifiedToken = retrieveToken(token)
res.type("application/json")
jacksonObjectMapper().writeValueAsString(verifiedToken)
}
}
}
fun createToken(): String {
val jwtProvider: JwtProvider = JwtProvider()
val jwt: String = jwtProvider.createJwt()
return jwt
}
fun retrieveToken(jwt: String): String {
val jwtProvider: JwtProvider = JwtProvider()
return jwtProvider.verifyJwt(jwt)
}
在URL中设置令牌似乎有效,但这不是我想要做的事情:
curl -X POST 'http://localhost:4567/tokens' -d 'token=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vdHJ1c3R5YXBwLmNvbS8iLCJzdWIiOiJ1c2Vycy8xMzAwODE5MzgwIiwiZXhwIjoxNDg5OTgwNTI2fQ.5ZJG9GyhG-OCXg0C510MBFs9EQHdE909s4hpNxnM6LU'
我正在使用Gradle,这是我的build.gradle
,以防万一:
group 'com.github.juanmougan'
version '1.0-SNAPSHOT'
buildscript {
ext.kotlin_version = '1.1.1'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'java'
apply plugin: 'kotlin'
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:1.0.1"
compile group: 'com.sparkjava', name: 'spark-core', version: '2.5.5'
compile 'io.jsonwebtoken:jjwt:0.7.0'
compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-kotlin', version: '2.8.7'
testCompile group: 'junit', name: 'junit', version: '4.11'
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
我遇到this answer,它使用Spark和Java并手动解析主体。所以我尝试在一个样本,全新的Spark / Maven / Java项目中使用它,但它甚至都不会编译。在这一行
JSONObject json = JSONObject.fromObject(element);
无法导入课程JSONObject
。所以我想这是一个松散的结局。
任何想法都将不胜感激。
提前致谢
答案 0 :(得分:0)
JSONObject
位于org.json:json
,您可能想要添加该包。
如果您想使用杰克逊,请查看例如http://www.journaldev.com/2324/jackson-json-java-parser-api-example-tutorial(要实际使用杰克逊,您至少需要com.fasterxml.jackson.core:jackson-core
,还需要com.fasterxml.jackson.core:jackson-databind
)。