1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
   | package com.example.demo;
  import java.util.ArrayList; import java.util.List; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.gateway.event.RefreshRoutesEvent; import org.springframework.cloud.gateway.route.RouteDefinition; import org.springframework.cloud.gateway.route.RouteDefinitionRepository; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono;
 
 
  @RestController @SpringBootApplication public class DemoApplication implements RouteDefinitionRepository, ApplicationEventPublisherAware {
      public static void main(String[] args) {         SpringApplication.run(DemoApplication.class, args);     }
           ApplicationEventPublisher applicationEventPublisher;
      @Override     public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {         this.applicationEventPublisher = applicationEventPublisher;     }
 
           List<RouteDefinition> memery = new ArrayList<>();
      private void refreshRoute() {         applicationEventPublisher.publishEvent(new RefreshRoutesEvent(this));     }
      @PutMapping     Mono<Void> putRoute(@RequestBody Mono<RouteDefinition> o) {         return o.flatMap(routeDefinition -> {             memery.add(routeDefinition);             refreshRoute();             return Mono.empty();         });     }
      @PostMapping     Mono<Void> postRoute(@RequestBody Mono<RouteDefinition> o) {         return o.flatMap(routeDefinition -> {             for (int i = 0; i < memery.size(); i++) {                 if (memery.get(i).getId().equals(routeDefinition.getId())) {                     memery.set(i, routeDefinition);                 }             }             refreshRoute();             return Mono.empty();         });     }
      @DeleteMapping     Mono<Void> deleteRoute(@RequestBody Mono<String> o) {         return o.flatMap(id -> {             memery.removeIf(routeDefinition -> routeDefinition.getId().equals(id));             refreshRoute();             return Mono.empty();         });     }
      @GetMapping     Mono<List<RouteDefinition>> getRoute(){         return Mono.just(memery);     }
      @Override     public Flux<RouteDefinition> getRouteDefinitions() {         return Flux.fromIterable(memery);     }
      @Override     public Mono<Void> save(Mono<RouteDefinition> route) {         return Mono.empty();     }
      @Override     public Mono<Void> delete(Mono<String> routeId) {         return Mono.empty();     } }
   |