/ / kotlin Datenklasse HttpMessageNotReadableException - Json, Frühling, Kotlin

Kotlin Daten Klasse HttpMessageNotReadableException - Json, Frühling, Kotlin

Ich versuche diesen Code mit Postboten, aber nichts funktioniert, warum?

Was ich sende:

{
"name":"front_msel",
"gitlabId": "83",
"fichierVersion":"VERSION"
}

Mein Federregler:

@RestController
@RequestMapping("/projects")
class ProjectController(val projectRepository: ProjectRepository) {
private val log = LoggerFactory.getLogger(ProjectController::class.java)

@PostMapping()
fun saveProject(@RequestBody payload: Project): String {
log.info("project: "{}"", payload.toString())
return projectRepository.save(payload).gitlabId?:"-1"
}

}

Was ich bekomme:

{
"timestamp": 1505917417221,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.http.converter.HttpMessageNotReadableException",
"message": "JSON parse error: Can not construct instance of com.......model.Project: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.......model.Project: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)n at [Source: java.io.PushbackInputStream@66ba61d9; line: 2, column: 2]",
"path": "/projects"

}

Meine Projektdatenklasse:

data class Project(val name:String?, val gitlabId: String?, val fichierVersion: String?)

Ich verdoppelte Params, es ist kein Wortfehler, was funktioniert nicht?

EDIT:

Dank Todd wurde das Problem gelöst, indem meinem Parameter null hinzugefügt wurde, um einen Konstruktor mit null Argumenten zu generieren. Vielen Dank !

data class Project(val name:String? = null, val gitlabId: String? = null, val fichierVersion: String? = null)

Antworten:

2 für die Antwort № 1

Ich habe das zum Laufen gebracht, indem ich zwei kleine Änderungen vorgenommen habe.

Erstens, seit all deinen Project Felder sind Nullable, stellen Standardwerte zur Verfügung, so dass der Compiler einen Nullargumentkonstruktor generiert:

data class Project(val name:String? = null, val gitlabId: String? = null, val fichierVersion: String? = null)

Zweitens scheint der Frühling, dass deine Felder drin sein sollen snakey_case eher, als camelCase, ändere deine Nutzlast so:

{
"name":"front_msel",
"gitlab_id": "83",
"fichier_version":"VERSION"
}