/ / kotlin klasa danych HttpMessageNotReadableException - json, spring, kotlin

klasa danych kotlin HttpMessageNotReadableException - json, spring, kotlin

Próbuję tego kodu z listonoszem, ale nic nie działa, dlaczego?

Co wysyłam:

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

Mój kontroler wiosny:

@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"
}

}

Co dostaję :

{
"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"

}

Moja klasa danych projektu:

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

Podwajałem params, to nie jest błąd w sformułowaniu, co to wszystko nie działa?

EDYTOWAĆ :

Dzięki Toddowi problem został rozwiązany przez dodanie wartości null do mojego parametru, aby wygenerować konstruktor z argumentem zerowym. Dzięki !

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

Odpowiedzi:

2 dla odpowiedzi № 1

Zrobiłem to, robiąc dwie niewielkie zmiany.

Po pierwsze, od wszystkich Project pola są zerowe, podaj wartości domyślne, aby kompilator wygenerował konstruktor argumentów zerowych:

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

Po drugie, wydaje się, że Spring chce, aby wasze pola były w zasięgu snakey_case zamiast camelCase, więc zmień swój ładunek na:

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