| 知乎专栏 |
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId> </dependency>
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
import cn.netkiller.entity.User;
public interface UserRepository extends ReactiveMongoRepository<User, Long>{
}
@Service
public class MongoServiceImpl implements MongoService {
@Autowired
private UserRepository userRepository;
@Override
public Mono<User> getById(Long id) {
return userRepository.findById(id);
}
@Override
public Mono<User> addUser(User user) {
return userRepository.save(user);
}
@Override
public Mono<Boolean> deleteById(Long id) {
userRepository.deleteById(id);
return Mono.create(userMonoSink -> userMonoSink.success());
}
@Override
public Mono<User> updateById(User user) {
return userRepository.save(user);
}
@Override
public Flux<User> findAllUser() {
return userRepository.findAll();
}
}
@RestController
@RequestMapping("/usermg")
public class UserMongoController {
@Autowired
private MongoService mongoService;
@GetMapping("/add")
public Mono<User> add(User user) {
user = new User();
User user = new User();
user.setAccount("neo");
user.setPassword("123456");
user.setNickname("netkiller");
user.setEmail("netkiller@msn.com");
user.setPhone("");
user.setGender(true);
user.setBirthday("1980-01-30");
user.setProvince("广东省");
user.setCity("深圳市");
user.setCounty("南山区");
user.setAddress("");
user.setState("Enabled");
System.out.println(JSON.toJSONString(user));
return mongoService.addUser(user);
}
/**
* 注意这里 produces = MediaType.APPLICATION_STREAM_JSON_VALUE 必须这样设置
*/
@GetMapping(value="/findAll",produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
public Flux<User> findAll(){
return mongoService.findAllUser().delayElements(Duration.ofSeconds(1));
}
}
produces 如果不是application/stream+json则调用端无法滚动得到结果,将一直阻塞等待数据流结束或超时。