@RequestMapping(value = "/data", method = GET)
  @ResponseBody
  public Map<String, Object> data(@RequestParam("dsId") JdbcOeDataSource ds, WebRequest request)
      throws ErrorMessageException, OeDataSourceAccessException {
    JdbcOeDataEntrySource jdes = (JdbcOeDataEntrySource) ds;
    DbKeyValMap dbKeyValMap = new DbKeyValMap();
    String doNotParseKeys = request.getParameter("doNotParseKeys");
    if (doNotParseKeys == null || !doNotParseKeys.equalsIgnoreCase("true")) {
      dbKeyValMap = ControllerUtils.parseKeyValueMap(jdes, request.getParameterMap());
    }
    // retrieve existing record and children
    CompleteRecord completeRecord =
        jdes.getCompleteRecord(
            dbKeyValMap, new ArrayList<String>(jdes.getChildTableMap().keySet()));

    Map<String, Object> data =
        ControllerUtils.mapDataAndFormatTimeForResponse(
            completeRecord.getParentRecord().getValues().keySet(),
            completeRecord.getParentRecord().getValues());

    // Children
    for (ChildRecordSet childRecordSet : completeRecord.getChildrenRecordSets()) {
      List<Object> childRecords = new ArrayList<Object>();
      for (TableAwareQueryRecord tableAwareQueryRecord : childRecordSet.getChildRecords()) {
        childRecords.add(
            ControllerUtils.mapDataAndFormatTimeForResponse(
                tableAwareQueryRecord.getValues().keySet(), tableAwareQueryRecord.getValues()));
      }
      data.put(childRecordSet.getChildTableName(), childRecords);
    }

    return data;
  }