code: protected Specification<ENTITY> buildSpecification(StringFilter filter, Function<Root<ENTITY>, Expression<String>> metaclassFunction) {
          if (filter.getEquals() != null) {
              return equalsSpecification(metaclassFunction, filter.getEquals());
          } else if (filter.getIn() != null) {
              return valueIn(metaclassFunction, filter.getIn());
          } else if (filter.getContains() != null) {
              return likeUpperSpecification(metaclassFunction, filter.getContains());
          } else if (filter.getSpecified() != null) {
              return byFieldSpecified(metaclassFunction, filter.getSpecified());
          }
          return null;
      }
docs: Helper function to return a specification for filtering on a {@link String} field, where equality, containment,
  and null/non-null conditions are supported.
  
  @param filter            the individual attribute filter coming from the frontend.
  @param metaclassFunction lambda, which based on a Root&lt;ENTITY&gt; returns Expression - basicaly picks a column
  @return a Specification