docs: private void handleCollisionNotMatched(TSDB tsdb, HttpQuery query, final boolean for_collisions) {
      final Map<String, Object> map;
      if (query.hasContent()) {
        map = query.serializer().parseTreeTSUIDsListV1();
      } else {
        map = parseTSUIDsList(query);
      }
      
      final Integer tree_id = (Integer) map.get("treeId");
      if (tree_id == null) {
        throw new BadRequestException("Missing or invalid Tree ID");
      }
      
      // make sure the tree exists
      try {
        
        if (Tree.fetchTree(tsdb, tree_id).joinUninterruptibly() == null) {
          throw new BadRequestException(HttpResponseStatus.NOT_FOUND, 
              "Unable to locate tree: " + tree_id);
        }
    
        if (query.getAPIMethod() == HttpMethod.GET || query.getAPIMethod() == HttpMethod.POST ||
            query.getAPIMethod() == HttpMethod.PUT) {
    
          // ugly, but keeps from having to create a dedicated class just to 
          // convert one field.
          @SuppressWarnings("unchecked")
          final List<String> tsuids = (List<String>)map.get("tsuids");
          final Map<String, String> results = for_collisions ? 
              Tree.fetchCollisions(tsdb, tree_id, tsuids).joinUninterruptibly() :
                Tree.fetchNotMatched(tsdb, tree_id, tsuids).joinUninterruptibly();
          query.sendReply(query.serializer().formatTreeCollisionNotMatchedV1(
              results, for_collisions));
    
        } else {
          throw new BadRequestException(HttpResponseStatus.BAD_REQUEST, 
          "Unsupported HTTP request method");
        }
      
      } catch (ClassCastException e) {
        throw new BadRequestException(
            "Unable to convert the given data to a list", e);
      } catch (BadRequestException e) {
        throw e;
      } catch (IllegalArgumentException e) {
        throw new BadRequestException(e);
      } catch (Exception e) {
        throw new RuntimeException(e);
      }
    }