Я пробую этот код с почтальоном, но ничего не работает, почему?
Что я посылаю:
{ "name":"front_msel", "gitlabId": "83", "fichierVersion":"VERSION" }
Мой контроллер пружины:
@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" } }
Что я получаю:
{ "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"
}
Мой класс данных проекта:
data class Project(val name:String?, val gitlabId: String?, val fichierVersion: String?)
Я удвоил контрольные параметры, это не ошибка в формулировке, что это не работает?
РЕДАКТИРОВАТЬ :
Благодаря Тодду проблема была решена путем добавления нулевого значения к моему параметру, чтобы создать конструктор нулевых аргументов. Благодаря !
data class Project(val name:String? = null, val gitlabId: String? = null, val fichierVersion: String? = null)
У меня это получилось, сделав два небольших изменения.
Во-первых, поскольку все поля вашего Project
имеют значение NULL, укажите значения по умолчанию, чтобы компилятор сгенерировал конструктор нулевых аргументов:
data class Project(val name:String? = null, val gitlabId: String? = null, val fichierVersion: String? = null)
Во-вторых, кажется, что Spring хочет, чтобы ваши поля были в snakey_case
а не в camelCase
, поэтому измените свою полезную нагрузку на это:
{ "name":"front_msel", "gitlab_id": "83", "fichier_version":"VERSION" }