### Question:
BaseRequestItem implements RequestItem { public List<String> getListParameter(String paramName) { Object param = this.parameters.get(paramName); if (param == null) { return Collections.emptyList(); } if (param instanceof String && ((String)param).indexOf(',') != -1) { List<String> listParam = ImmutableList.copyOf(Splitter.on(',').split((String) param)); this.parameters.put(paramName, listParam); return listParam; } else if (param instanceof List<?>) { return (List<String>) param; } else if (param instanceof JSONArray) { try { JSONArray jsonArray = (JSONArray)param; List<String> returnVal = Lists.newArrayListWithCapacity(jsonArray.length()); for (int i = 0; i < jsonArray.length(); i++) { returnVal.add(jsonArray.getString(i)); } return returnVal; } catch (JSONException je) { throw new ProtocolException(HttpServletResponse.SC_BAD_REQUEST, je.getMessage(), je); } } else { return Lists.newArrayList(param.toString()); } } BaseRequestItem(Map<String, String[]> parameters,
      SecurityToken token,
      BeanConverter converter,
      BeanJsonConverter jsonConverter);  BaseRequestItem(JSONObject parameters,
      Map<String, FormDataItem> formItems,
      SecurityToken token,
      BeanConverter converter,
      BeanJsonConverter jsonConverter); String getAppId(); Date getUpdatedSince(); String getSortBy(); SortOrder getSortOrder(); String getFilterBy(); int getStartIndex(); int getCount(); FilterOperation getFilterOperation(); String getFilterValue(); Set<String> getFields(); Set<String> getFields(Set<String> defaultValue); SecurityToken getToken(); T getTypedParameter(String parameterName, Class<T> dataTypeClass); T getOptionalTypedParameter(String parameterName, Class<T> dataTypeClass); T getTypedRequest(Class<T> dataTypeClass); String getParameter(String paramName); String getParameter(String paramName, String defaultValue); Map<String, Object> getParameters(); List<String> getListParameter(String paramName); @VisibleForTesting void setParameter(String paramName, Object paramValue); FormDataItem getFormMimePart(String partName); Object getAttribute(String val); void setAttribute(String val, Object obj); Set<String> getParameterNames();  }### Answer:
@Test public void testJSONConstructor() throws Exception { request = new BaseRequestItem(new JSONObject('{' + "userId:john.doe," + "groupId:@self," + "fields:[huey,dewey,louie]" + '}'), null, FAKE_TOKEN, converter, converter); assertEquals(Lists.newArrayList("huey", "dewey", "louie"), request.getListParameter("fields")); }