code: private Set<String> getControllerPaths(Class<?> controllerClass) {
          Set<String> parentPaths = Collections.emptySet();
          if (controllerClass.getSuperclass() != null) {
              parentPaths = getControllerPaths(controllerClass.getSuperclass());
          }
  
          Set<String> paths = new LinkedHashSet<>();
          Path controllerPath = controllerClass.getAnnotation(Path.class);
  
          if (controllerPath != null && controllerPath.value().length > 0) {
              if (parentPaths.isEmpty()) {
                  // add all controller paths
                  paths.addAll(Arrays.asList(controllerPath.value()));
              } else {
                  // create controller paths based on the parent paths
                  for (String parentPath : parentPaths) {
                      for (String path : controllerPath.value()) {
                          paths.add(StringUtils.removeEnd(parentPath, "/") + "/" + StringUtils.removeStart(path, "/"));
                      }
                  }
              }
          } else {
              // add all parent paths
              paths.addAll(parentPaths);
          }
  
          return paths;
      }
docs: Recursively builds the paths for the controller class.
  
  @param controllerClass
  @return the paths for the controller