code: static String process(final Object o) {
  
          final StringBuilder s = new StringBuilder();
  
          for (final Field f : o.getClass().getDeclaredFields()) {
  
              final QueryParameter paramMetadata = f.getAnnotation(QueryParameter.class);
              final Object fieldValue = getValue(o, f);
  
              // each field having the QueryParameter annotation is processed
              if (null != fieldValue && null != paramMetadata) {
  
                  final String paramFormat = paramMetadata.value();
                  String paramValue = serialize(paramMetadata, fieldValue, f.getName());
  
                  if (null != paramValue && !"".equals(paramValue.trim())) {
                      if (s.length() > 0) {
                          s.append('&');
                      }
                      if (paramMetadata.encode()) {
                          paramValue = uriEncode(paramValue);
                      }
                      s.append(String.format(Locale.US, paramFormat, paramValue));
                  }
              }
          }
          return s.toString();
      }
docs: Process an object to generate a query string.
  <ul>
  <li>only {@link QueryParameter} annotated fields are used</li>
  <li>null or empty values are ignored</li>
  </ul>
  
  @param o
  the object to scan for {@link QueryParameter} annotations
  @return the generated query string
  @throws UnsupportedEncodingException