Estou escrevendo um backend Spring Boot para um cliente ktor multiplataforma Kotlin. Na maioria dos casos, isso funciona muito bem, mas tenho um problema com a serialização e desserialização de booleanos. Este é meu endpoint no lado do servidor:
@GetMapping("/api/v1/user/existsByUsername/{username}", produces = [MediaType.APPLICATION_JSON_VALUE])
@ResponseBody
fun userExistsByUsername(@PathVariable("username") username: String) : ResponseEntity<Boolean> {
val exists = userService.usernameExists(username)
return ResponseEntity.status(HttpStatus.OK).body(exists)
}
Estou esperando obter um resultado deste endpoint como {true}
mas o cliente recebe o corpo true
- e não pode desserializá-lo. Posso forçar o endpoint de uma forma simples a adicionar as chaves? Ou há uma maneira de dizer ao ktor para desserializar tipos básicos como não JSON?
No Spring Boot, tipos primitivos (como booleano ou inteiro) são serializados diretamente como um valor puro no corpo da resposta, sem serem encapsulados em um objeto (então você obtém
true
efalse
).Crie uma classe em seu código kotlin
então, caro @padmalcom, você pode escrever algo como
que usa sua classe.
Portanto, seu retorno JSON (ponto final de descanso) será:
com chaves.
Lado Ktor então:
Rápido e ̶f̶u̶r̶i̶o̶u̶s̶ simples