webflux returns 空对象列表
webflux returns a list of empty objects
我是 Spring 编程的新手。我正在使用 Reactor / Webflux 项目测试反应式编程。
通过 Post 数据库注册效果很好。
但是每次 API 调用 Get Mono 或 Flux 我都会得到一个空对象列表。
你能给我一个解决方案吗?
我通过 Kotlin 中的 Spring boot / Maven 和 Mongo reactive 启动了该项目。
感谢您的帮助!
我的用户应用程序
@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>
我的用户服务
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)
}
}
我的用户资源
@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 DEBUG 25022 --- [ctor-http-nio-4] o.s.d.m.core.ReactiveMongoTemplate : 使用查询查找:{ } 字段:文档{{}}对于 class: class com.inovans.backend.usersms.domains.User 在集合中:用户
在您的 User
数据 class 中,您的所有成员都被声明为私有的,因此在返回给客户端时不会被序列化为 JSON。将它们更改为 public(只需删除单词 private
,因为它将默认为 public),希望这会有所帮助。
至于Java,您可以为相应的字段创建setters/getters并且不创建args构造函数,而不是将所有数据公开。
一种更具声明性的方法是使用 Lombok 项目注释。
@Data *// This annotation includes all you need*
@Document("yourDocName")
public class YourClass {
@Id
private String id;
@Field("FieldName")
private String myField;
}
希望这对某人有用:)
我是 Spring 编程的新手。我正在使用 Reactor / Webflux 项目测试反应式编程。
通过 Post 数据库注册效果很好。
但是每次 API 调用 Get Mono 或 Flux 我都会得到一个空对象列表。 你能给我一个解决方案吗?
我通过 Kotlin 中的 Spring boot / Maven 和 Mongo reactive 启动了该项目。
感谢您的帮助!
我的用户应用程序
@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>
我的用户服务
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)
}
}
我的用户资源
@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 DEBUG 25022 --- [ctor-http-nio-4] o.s.d.m.core.ReactiveMongoTemplate : 使用查询查找:{ } 字段:文档{{}}对于 class: class com.inovans.backend.usersms.domains.User 在集合中:用户
在您的 User
数据 class 中,您的所有成员都被声明为私有的,因此在返回给客户端时不会被序列化为 JSON。将它们更改为 public(只需删除单词 private
,因为它将默认为 public),希望这会有所帮助。
至于Java,您可以为相应的字段创建setters/getters并且不创建args构造函数,而不是将所有数据公开。
一种更具声明性的方法是使用 Lombok 项目注释。
@Data *// This annotation includes all you need*
@Document("yourDocName")
public class YourClass {
@Id
private String id;
@Field("FieldName")
private String myField;
}
希望这对某人有用:)