Spring Web, Kotlin, Gradle, IntelliJ -> MongoRepository проблема «Неразрешенная ссылка: сохранить»

#mongodb #spring-mvc #kotlin #gradle #intellij-idea

Вопрос:

У меня возникает проблема, когда я пытаюсь использовать монорецептор. Это мой класс документов:

 package model

import org.springframework.data.annotation.Id
import org.springframework.data.mongodb.core.mapping.Document

@Document
class Product (@Id val name: String, var desc: String, var price: Double) {

    var pictureCategory: String? = null

}
 

Это хранилище:

 package model.repositories

import model.Product
import org.springframework.data.mongodb.repository.MongoRepository
import org.springframework.stereotype.Repository

@Repository
interface ProductRepository : MongoRepository <Product, String>
 

и это файл, в котором у меня ошибка компиляции:

 package controllers

import model.Product
import model.repositories.ProductRepository
import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping

@Controller
@RequestMapping("/product")
class ProductController {

    @PostMapping("")
    fun addProduct(@RequestBody newProduct: Product){
        ProductRepository.save()  //Unresolved reference: save <----------------------
    }
}
 

Я попытался выполнить и аннулировать/перезапустить, но ничего не изменилось.

Это мой файл build.gradle.kts:

 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "2.4.3"
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
    kotlin("jvm") version "1.4.30"
    kotlin("plugin.spring") version "1.4.30"
    kotlin("plugin.jpa") version "1.4.30"
}

group = "com.example"
version = "1.0.0"
java.sourceCompatibility = JavaVersion.VERSION_11

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-data-mongodb")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "11"
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}
 

Может быть, какие-то зависимости, которые я должен добавить?

Ответ №1:

Предполагается, что вы должны внедрить свой репозиторий в контроллер REST, не используя статический метод «сохранить».

См.: https://spring.io/guides/tutorials/rest/ например.