保存在ReactiveCrudRepository中,不插入或更新记录

如标题中所述,我无法在Postgres数据库中插入或更新记录。 我刚开始使用spring和kotlin,所以可能缺少一些非常基本的配置。预先感谢

这是我的代码库

UserRepository

@Repository
interface UserRepository : ReactiveCrudRepository<User,Int> {}

用户模型 @Table(“ user_app”)

data class User (
    @Id
    @Column("id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    val id : Int? =  null,@Column("username")
    val username : String?,@Column("email")
    val email : String?,@Column("name")
    val name : String?,@Column("password")
    val password : String?
)

UserController @Component

class UserController{

    @Autowired
    private lateinit var userRepository : UserRepository

    fun getallUsers() : Flux<User> = userRepository.findAll()

    fun getUserById( userId: Int) : Mono<User> = userRepository.findById(userId)

    fun createUser(user: User): Mono<User> = userRepository.save(user)

    fun updateUser(user: User) : Mono<User> = userRepository.save(user)

}

用户配置

@Configuration
class UserConfiguration {

    @FlowPreview
    @Bean
    fun userRouter(controller: UserController): RouterFunction<ServerResponse> = router{
        ("/users").nest{
            GET("") { _ ->
                ServerResponse.ok().body(controller.getallUsers())
            }

            GET("/{id}") { req ->
                ServerResponse.ok().body(controller.getUserById(req.pathVariable("id").toInt()))
            }

            accept(MediaType.APPLICATION_JSON)
            POST("") {req ->
                ServerResponse.ok().body(req.bodyToMono(User::class.java).doOnNext { user ->
                        controller.createUser(user)                })
            }

            accept(MediaType.APPLICATION_JSON)
            PUT("") {req ->
                ServerResponse.ok().body(req.bodyToMono(User::class.java).doOnNext { user ->
                    run {
                        controller.updateUser(user)
                    }
                })
            }
        }
    }
}

R2dbcConfiguration

@Configuration
@EnableR2dbcRepositories
class R2dbcConfiguration  : AbstractR2dbcConfiguration() {
    @Bean
    override fun connectionFactory(): PostgresqlConnectionFactory  {
        val config = PostgresqlConnectionconfiguration.builder()
                .host("localhost")
                .port(5432)
                .database("postgres")
                .username("postgres")
                .password("pass123")
                .build()

        return PostgresqlConnectionFactory(config)

    }

}
waltc 回答:保存在ReactiveCrudRepository中,不插入或更新记录

找出为什么这没用。 保存不会将更改保留在数据库中,为此,您需要调用某些方法。我叫subscribe,但是因为这是一个阻塞方法,所以我在let块或doOnNext中运行它

fun createUser(request: ServerRequest): Mono<ServerResponse> {
        println("createUser")
        val badRequest = ServerResponse.badRequest().build()
        val user = request.bodyToMono(User::class.java)

        return user
                .doOnNext { u -> userRepository.save(u).subscribe() }
                .flatMap {
                    ServerResponse.ok().contentType(APPLICATION_JSON).body(fromValue(it))
                }
    }
本文链接:https://www.f2er.com/2608869.html

大家都在问