新建一个UserController.java
@RestController
@RequestMapping("/user")
public class UserController {
private final UserService userService;
@Autowired
public UserController(final UserService userService) {
this.userService = userService;
}
@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Resource not found")
@ExceptionHandler(ResourceNotFoundException.class)
public void notFound() {
}
@GetMapping("")
public Flux<User> list() {
return this.userService.list();
}
@GetMapping("/{id}")
public Mono<User> getById(@PathVariable("id") final String id) {
return this.userService.getById(id);
}
@PostMapping("")
public Mono<User> create(@RequestBody final User user) {
return this.userService.createOrUpdate(user);
}
@PutMapping("/{id}")
public Mono<User> update(@PathVariable("id") final String id, @RequestBody final User user) {
Objects.requireNonNull(user);
user.setId(id);
return this.userService.createOrUpdate(user);
}
@DeleteMapping("/{id}")
public Mono<User> delete(@PathVariable("id") final String id) {
return this.userService.delete(id);
}
}
@Service
public class UserService {
private final Map<String, User> data = new ConcurrentHashMap<>();
public Flux<User> list() {
return Flux.fromIterable(this.data.values());
}
public Flux<User> getById(final Flux<String> ids) {
return ids.flatMap(id -> Mono.justOrEmpty(this.data.get(id)));
}
public Mono<User> getById(final String id) {
return Mono.justOrEmpty(this.data.get(id))
.switchIfEmpty(Mono.error(new ResourceNotFoundException()));
}
public Mono<User> createOrUpdate(final User user) {
this.data.put(user.getId(), user);
return Mono.just(user);
}
public Mono<User> delete(final String id) {
return Mono.justOrEmpty(this.data.remove(id));
}
public void fromStream () {
SortedMap<String, Charset> charSetMap = Charset.availableCharsets();
Stream<String> charSetStream = charSetMap.keySet().stream();
Flux<String> charsetFlux = Flux.fromStream(charSetStream);
charsetFlux.subscribe(System.out::println);
}
public void range() {
Flux.range(1, 5).subscribe(System.out::println);
// 溢出
Flux.range(Integer.MAX_VALUE, 5).subscribe(System.out::println);
}
}
以上代码使用Map完成了关于用户的增删改查操作。这也是我们在项目中运用最多的操作。如果只是想要在完成时给出完成信号,就可以使用 Mono<Void>。 接下来对service中用到的一些方法进行讲解: