[ad_1]
我正在做一个后端服务器,在测试 /register 路由时遇到一些问题。 我认为我已经正确配置了所有内容,但是当我尝试在 Postman 上执行 POST 方法时,它给了我 406 错误,这是我正在使用的链接“http://127.0.0.1:8080/v1/users/register”我连接到了 PostGreSQL DB,在 Postman 上发出请求后,我什至检查了数据库,但那里什么也没有,在这个路由部分之前我已经使用 Ktor 创建了一个表。
这是我的路线文件
科特林
fun Route.userRoutes(db: repo, jwtService: JwtService, hashFunction: (String) -> String) { route("/v1/users") { post("/register") { try { val registerRequest = call.receive<RegisterRequest>() // Handle registration logic val user = User(registerRequest.email, hashFunction(registerRequest.password), registerRequest.name) db.addUser(user) call.respond(HttpStatusCode.OK, SimpleResponse(true, jwtService.generateToken(user))) } catch (e: Exception) { // Handle registration errors call.respond(HttpStatusCode.BadRequest, SimpleResponse(false, "Missing Some Fields or Registration Failed")) } }
注册班级
科特林
data class RegisterRequest( val email:String, val name:String, val password:String )
简单响应类
科特林
package com.example.data.model data class SimpleResponse( val success:Boolean, val message:String )
当我尝试在 POSTMAN 上发送 POST 时,这就是 IntelliJ 控制台上显示的内容
终端
2023-12-29 21:42:28.514 [eventLoopGroupProxy-4-1] TRACE io.ktor.server.routing.Routing - Trace for [v1, users, register] /, segment:0 -> SUCCESS @ / /session, segment:0 -> FAILURE "Selector didn't match" @ /session /json, segment:0 -> FAILURE "Selector didn't match" @ /json /, segment:0 -> SUCCESS @ / /(method:GET), segment:0 -> FAILURE "Selector didn't match" @ /(method:GET) /v1, segment:1 -> SUCCESS @ /v1 /v1/users, segment:2 -> SUCCESS @ /v1/users /v1/users/register, segment:3 -> SUCCESS @ /v1/users/register /v1/users/register/(method:POST), segment:3 -> SUCCESS @ /v1/users/register/(method:POST) /v1/users/login, segment:2 -> FAILURE "Selector didn't match" @ /v1/users/login Matched routes: "" -> "v1" -> "users" -> "register" -> "(method:POST)" Route resolve result: SUCCESS @ /v1/users/register/(method:POST) 2023-12-30 21:04:26.349 [eventLoopGroupProxy-4-1] TRACE i.k.server.engine.DefaultTransform - No Default Transformations found for class io.ktor.utils.io.ByteBufferChannel and expected type TypeInfo(type=class com.example.data.model.RegisterRequest, reifiedType=class com.example.data.model.RegisterRequest, kotlinType=com.example.data.model.RegisterRequest) for call /v1/users/register 2023-12-30 21:04:26.375 [eventLoopGroupProxy-4-1] TRACE i.k.s.p.c.ContentNegotiation - No suitable content converter found for request type class com.example.data.model.RegisterRequest 2023-12-30 21:04:26.384 [eventLoopGroupProxy-4-1] TRACE io.ktor.server.sessions.Sessions - Sending session data for /v1/users/register: MY_SESSION 2023-12-30 21:04:26.407 [eventLoopGroupProxy-4-1] TRACE i.k.s.p.c.ContentNegotiation - No suitable content converter found for response type class com.example.data.model.SimpleResponse and body SimpleResponse(success=false, message=Missing Some Fields)
请求的正文是这样的
{
“姓名”:“约翰”,
“电子邮件”:“abcd@gmail.com”,
“密码”:“通过”
}
科特林
fun Application.configureSerialization() { install(ContentNegotiation) { Json { prettyPrint = true isLenient = true encodeDefaults = false } } routing { get("/json/gson") { call.respond(mapOf("hello" to "world")) } } }
我尝试过的:
I have checked the headers tab on Postman and I have the Content-Type application/json and also the Accept "/" The dependencies on Gradle I used latest.release This is just for a simple Note App for android. The problem seems to be because the RegisterRequest and SimpleResponse I think. This is my first time using Ktor so sorry if I'm a bit behind in some aspects. Thank you for your time
解决方案1
我根本不了解 Kotlin,但似乎您捕获了异常但完全忽略它,只返回通用响应:
科特林
} catch (e: Exception) { // Handle registration errors call.respond(HttpStatusCode.BadRequest, SimpleResponse(false, "Missing Some Fields or Registration Failed"))
尝试返回异常消息或在某处记录异常消息,以便您更好地了解异常所抱怨的内容。
[ad_2]
コメント