https://kotlinlang.org logo
#ktor
Title
# ktor
m

manlan

10/19/2020, 11:27 AM
Where has this dependency gone? Intellij says it's not found.
Copy code
implementation("io.ktor:ktor-server-serialization:1.4.1")
I'm still confused about setting up kotlinx #serialization with ktor 😩
r

Razvan

10/19/2020, 11:33 AM
m

manlan

10/19/2020, 11:35 AM
Oh I'm sorry, corrected my actual dependency
r

Razvan

10/19/2020, 11:35 AM
Add the plugin:
Copy code
plugins {
    kotlin("plugin.serialization") version "1.4.10"
}
et la dependece vers la lib json
Copy code
dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.0")
}
m

manlan

10/19/2020, 11:37 AM
Please tell if my setup is proper for serialization:
Copy code
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.0")
Copy code
install(ContentNegotiation) {
    Json
}
I did the same
Copy code
val input = call.receive<FindReadersInput>()
I receive 415 in Postman when I call this endpoint
Copy code
@Serializable
data class FindReadersInput (
    val location: Location,
    val radius : Double
)
Copy code
@Serializable
data class Location(
    @SerialName("lat")
    val latitude : Double,
    @SerialName("lng")
    val longitude: Double,
)
r

Razvan

10/19/2020, 11:39 AM
Unfortunatelly the new web site is a mess and there's no example to the use of the lib
😭 1
yes the data class looks good your problom with with serializtion or deserialization ?
r

ribesg

10/19/2020, 11:45 AM
I don’t get it you’re talking about both server and client libraries there, what are you doing?
r

Razvan

10/19/2020, 11:45 AM
good point
m

manlan

10/19/2020, 11:46 AM
Copy code
routing {
    post("/readers") {
        val input = call.receive<FindReadersInput>()
        val readers = DBRepo.getReaders(input.radius, input.location)
        call.respond(readers)
    }
}
This is my endpoint. When I hit it, I get 415 unsupported media type
{     "location": {         "lat": -73.97,         "lng": 40.77     },     "radius": 50.0 }
This is the request body
r

ribesg

10/19/2020, 11:48 AM
You’ve got an HTTP GET with a request body?
m

manlan

10/19/2020, 11:49 AM
No ,edited it. It's a POST
r

Razvan

10/19/2020, 11:50 AM
make sure une your request you added the content-type as json
r

ribesg

10/19/2020, 11:51 AM
I don’t think you installed content negotiation properly, follow the documentation
m

manlan

10/19/2020, 11:54 AM
image.png
r

ribesg

10/19/2020, 11:55 AM
Server does not support json because you didn’t install its support.
r

Razvan

10/19/2020, 11:58 AM
It's a shame the web site or their samples git repository does not show a kx.serislization example... Any reason why you want it instead of Jackson ?
r

ribesg

10/19/2020, 11:58 AM
What do you mean no example? Did you even open the documentation?
r

Razvan

10/19/2020, 11:59 AM
m

manlan

10/19/2020, 11:59 AM
@ribesg I did install it. I posted above already, but here you go:
Copy code
install(ContentNegotiation) {
    Json 
}
r

ribesg

10/19/2020, 12:00 PM
@manlan RTFM and try again
1
m

manlan

10/19/2020, 12:00 PM
@Razvan No particular reason, except to use pure Kotlin libraries whenever I can
r

ribesg

10/19/2020, 12:00 PM
@Razvan this is the page referencing the kolinx.serialization library, among other kotlinx libraries.
I linked the Content Negotation with kotlinx.serialization documentation page, which is very clear and very easy to find.
👍 1
m

manlan

10/19/2020, 12:02 PM
@ribesg Just asking to follow the documentation when it's not clear enough isn't of any help. The links that you posted show only a minor code sample, but not a proper guide with respect to setting up what's required for this to work.
r

ribesg

10/19/2020, 12:05 PM
The documentation page I linked covers and fixes your exact problem. The documentation also contains dozens of full examples. You failing to navigate and read the documentation properly doesn’t make it bad.
r

Razvan

10/19/2020, 12:06 PM
Won't say very easy to find... but ok it's there... when you're getting started it's not that obvious that you have to look there... when there's a menu kotlinx/kotlinx.serisalization it could link to a real example or a github repository. the new web site is a mess IMHO i struggle finding things in it and I'm not new to it.
r

ribesg

10/19/2020, 12:07 PM
If you think the documentation has issues, then you can maybe fix them as others may not be aware of them. It’s open source.
Maybe the page you linked could link to the page I linked for example
m

manlan

10/19/2020, 12:14 PM
@ribesg I didn't say it's bad, I said it's not clear enough. If what's mentioned there is correct, how come
serialization()
doesn't resolve at all with all the correct dependencies? If your only contribution to my question is to ask me check the documentation, thanks, I did that already, which didn't seem clear enough to me, bringing me here to ask for help.
r

ribesg

10/19/2020, 12:18 PM
Did you setup the
ktor-serialization
feature?
The ktor serialization feature is named
ktor-serialization
not
ktor-server-serialization
👍🏼 1
m

manlan

10/19/2020, 12:26 PM
Thank you, that's the only change I had to make. I doubted my dependencies and that's what I initially posted for a review.
r

ribesg

10/19/2020, 12:43 PM
I didn’t get it right away because it should be renamed from
ktor-serialization
to
ktor-server-serialization
in the future (it’s being discussed). Ktor used to be server only, so naming everything
server
didn’t make sense. Now we have
ktor-serialization
and
ktor-client-serialization
, it’s confusing.
m

manlan

10/19/2020, 12:58 PM
Confusing indeed
7 Views