我有以下Sping Boot React式“堆栈”,其中包含GraphQL和MongoDB(在Kotlin中):
一个非常基本的服务器示例,它向查询客户公开GraphQL API:
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.data.annotation.Id
import org.springframework.data.mongodb.core.mapping.Document
import org.springframework.data.mongodb.repository.ReactiveMongoRepository
import org.springframework.graphql.data.GraphQlRepository
@SpringBootApplication class ServerApplication
fun main(args: Array<String>) {
runApplication<ServerApplication>(*args)
}
@Document
data class Customer(
@Id val id: String? = null,
val name: String?,
)
@GraphQlRepository
interface CustomerRepository : ReactiveMongoRepository<Customer, String>
与以下GraphQL模式文件结合使用
type Customer {
id: ID
name: String
}
type Query {
customers: [Customer]
customerById(id: ID!): Customer
}
type Mutation {
createCustomer(name: String!): Customer
}
已经可以查询customers
/customerById
并相应地使用例如以下代码检索数据:
{
customers { id name }
customerById(id: "...") { name }
}
@GraphQlRepository
注解可以实现这一点,它自动注册一个处理程序,以便直接从数据库获取数据。
然而,我在documentation中找不到任何关于如何实现变异的信息,也就是说,是否有这样一个简单的自动解决方案,比如查询,或者是否必须由@MutationMapping
的控制器**手动实现。
@Controller
class CustomerController(val customerRepository: CustomerRepository) {
@MutationMapping
fun createCustomer(@Argument name: String?): Mono<Customer> {
return customerRepository.save(Customer(name = name))
}
}
1条答案
按热度按时间yhxst69z1#
就我所知,必须像您建议的那样,通过
Controller
中专用的、带@MutationMapping
注解的方法来实现突变。我已经做了一些练习,与您的示例的唯一区别是我使用了一个特殊的Input
类型-在schema
和Java代码库中-来定义它;对于您来说,String
就可以了。方案:
控制器(注入服务):
对象输入:
(The
Obra
是带有JPA注解、列等的Entity
)希望能有所帮助!