webflux返回空对象的列表

时间:2019-05-07 13:21:23

标签: mongodb kotlin spring-webflux project-reactor

我是Spring编程的新手。我正在用Reactor / Webflux项目测试反应式编程。

通过Post进行数据库注册效果很好。

但是每个API调用Get Mono或Flux都会得到一个空对象的列表。 您能给我个解决办法吗?

我通过Kotlin和Mongo react的Spring boot / Maven启动了该项目。

谢谢您的帮助!

我的UsersApplication

@SpringBootApplication
class UsersMsApplication

fun main(args: Array<String>) {
    runApplication<UsersMsApplication>(*args)
}

我的模特:

@Document(collection = "user")
data class User(
                @Id
                private var id: String,
                @Field("name")
                private var name: String
                ) : Serializable

我的资料库

@Repository
interface UserRepository : ReactiveMongoRepository<User, String>

我的UserService

interface UserService {
    fun createUser(user: User): Mono<User>

    fun findAllUsers(): Flux<User>

    fun findOneById(id: String): Mono<User>
}

我的UserServiceImpl

@Service
class UserServiceImpl(private val userRepository: UserRepository): UserService {
    override fun createUser(user: User): Mono<User> {
        return userRepository.save(user)
    }

    override fun findAllUsers(): Flux<User> {
        return userRepository.findAll()
    }

    override fun findOneById(id: String): Mono<User> {
        return userRepository.findById(id)
    }
}

我的UserRessource

@RestController
@RequestMapping("/api")
class UserResource(private val userService: UserService) {

    @PostMapping("/users")
    fun addUser(@RequestBody user: User) : Mono<User> = userService.createUser(user)

    @GetMapping("/users")
    fun findAllUsers() : Flux<User> = userService.findAllUsers()

    @GetMapping("/users/{id}")
    fun getOneUser(@PathVariable id: String) : Mono<User> = userService.findOneById(id)

}

我的application.properties

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=users_db

logging.level.org.springframework.data=debug

我在数据库中有三个条目,但这是邮递员,curl或浏览器返回的结果:

[
    {},
    {},
    {}
]

并在我的控制台中:

2019-05-07 15:05:13.368调试25022 --- [ctor-http-nio-4] osdmcore.ReactiveMongoTemplate:使用查询查找:{}字段:Document {{}} for class:class com .inovans.backend.usersms.domains。集合中的用户:user

2 个答案:

答案 0 :(得分:2)

对于Java ,您可以为相应的字段创建设置器/获取器,而不创建所有args构造函数,而不是公开所有数据。

一种更具声明性的方法是使用 Lombok Project批注

@Data *// This annotation includes all you need*
@Document("yourDocName")
public class YourClass {

    @Id
    private String id;

    @Field("FieldName")
    private String myField;
}

希望这对某人有用:)

答案 1 :(得分:1)

在您的User数据类中,所有成员都被声明为私有成员,因此返回到客户端时不会序列化为JSON。将它们更改为公开(只需删除private,因为它将默认为公开),希望对您有所帮助。