Привет, я реализую REST API, используя эту платформу. Я использую язык Kotlin. После создания связей между таблицами с помощью инструмента «Почтальон» я отправляю Json на сервер и связанную конечную точку со следующей структурой: Категория Json
{
"title" :"Sport"
}
После Получив его, я столкнусь со следующей ошибкой. Сообщение об ошибке выглядит следующим образом:
{
"timestamp": "2020-04-01T21:28:22.631+0000",
"status": 400,
"error": "Bad Request",
"message": "JSON parse error: No Object Id found for an instance of `ir.vahidgarousi.app.farzin.modules.posts.models.Category`, to assign to property 'id'; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: No Object Id found for an instance of `ir.vahidgarousi.app.farzin.modules.posts.models.Category`, to assign to property 'id'\n at [Source: (PushbackInputStream); line: 3, column: 1] (through reference chain: ir.vahidgarousi.app.farzin.modules.posts.models.Category[\"id\"])",
"path": "/category/"
}
дополнительная информация:
Категория объекта:
@Entity
@Table(name = "categories_tbl")
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator::class,
property = "id")
data class Category(
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long? = null,
@ManyToMany(mappedBy = "categories")
var posts: List<Post> = mutableListOf(),
var title: String,
@Column(name = "created_at")
var createdAt: LocalDateTime = LocalDateTime.now(),
@Column(name = "updated_at")
var updatedAt: LocalDateTime = LocalDateTime.now()
)
Сообщение объекта:
@Entity
@Table(name = "posts_table")
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator::class,
property = "id")
data class Post(
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long? = null,
@ManyToOne
@JsonManagedReference
var user: User,
@ManyToMany
@JoinTable(name = "post_catefories")
var categories: List<Category> = mutableListOf(),
var title: String,
var body: String,
var cover: String,
@Column(name = "created_at")
var createdAt: LocalDateTime = LocalDateTime.now(),
@Column(name = "updated_at")
var updatedAt: LocalDateTime = LocalDateTime.now()
)
CategoryController:
@RestController
@RequestMapping("/category")
class CategoryController @Autowired constructor(private val categoryService : CategoryService) {
@RequestMapping(*["/", ""], method = [RequestMethod.GET])
fun getCategories(): List<Category> {
return categoryService.getAll()
}
@RequestMapping(*["/", ""], method = [RequestMethod.POST])
fun addCategory(@RequestBody category: Category): Category {
return categoryService.addCategory(category)
}
}
CategoryService:
@Service
class CategoryService @Autowired constructor(val categoryRepository: CategoryRepository) {
fun getAll(): List<Category> {
return categoryRepository.findAll()
}
fun addCategory(category : Category) : Category {
return categoryRepository.save(category)
}
}
Репозиторий категорий :
@Repository
interface CategoryRepository: JpaRepository<Category, Long> {
}
application.properties
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3308/*
spring.datasource.username=root
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect