code: public Map<String, List<String>> toPostMap(boolean includeNulls) {
          Class<? extends BaseCanvasModel> clazz = this.getClass();
          Map<String, List<String>> postMap = new HashMap<>();
          for (Method method : clazz.getMethods()) {
              CanvasField canvasFieldAnnotation = method.getAnnotation(CanvasField.class);
              if (canvasFieldAnnotation != null && canvasFieldAnnotation.postKey() != null) {
                  final String postKey = getPostKey(canvasFieldAnnotation);
                  try {
                      final List<String> fieldValues = getFieldValues(method);
                      if ((fieldValues != null && !fieldValues.isEmpty()) || includeNulls) {
                          if (postMap.containsKey(postKey)) {
                              postMap.get(postKey).addAll(fieldValues);
                          } else {
                              postMap.put(postKey, fieldValues);
                          }
                      }
                  } catch (final IllegalAccessException | InvocationTargetException e) {
                      final String message = "Could not access Canvas model getter for" + postKey;
                      LOG.error(message, e);
                      throw new IllegalStateException(message, e);
                  }
              }
          }
          return postMap;
      }
docs: /* Canvas has post parameter keys in non consistent formats. Occasionally they are 'class[field]' and other times
  they are just 'field'. This method will create a map with the correct post keys and values based on the
  @CanvasField and @CanvasObject annotations.