[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 )
SimpleResponse クラス
コトリン
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]
コメント