Delphi XE2 DataSnap REST manejo de parámetros de iOS asihttprequest

Estoy creando una aplicación para el iPhone que se vincula a un Servidor REST de Delphi XE2 DataSnap.

Originalmente, estaba codificando el front-end de iOS con la ayuda de los conectores móviles de Embarcadero, sin embargo, debido a muchos errores, tengo que escribir mi propio enlace con la ayuda de asihttprequest.

Si bien puedo hacer que el sistema maneje las solicitudes JSON y pase uno o dos parámetros (usando la URL) como:

NSURL *theURL = [NSURL URLWithString:@"http://192.168.1.2:8080/datasnap/rest/tservermethods1/SaveMileage/type1/100];
request = [ASIHTTPRequest requestWithURL:theURL];

(donde el método del servidor es SaveMileage y los dos valores de parámetro son type1 y 100)

Sin embargo, si quiero agregar parámetros más complejos, necesito usar appendPostData para publicar los parámetros usando JSON: -

[request appendPostData:jsonMutData];

A continuación se muestra la salida de jsonMutData: -

{
  "client_ref" : "ABC100",
  "mileage_type" : "Fee Work",
  "mileage_description" : "test",
  "mileage_id" : "0",
  "mileage_date" : "03\/15\/2012"
}

Sin embargo, cuando publico esto en mi servidor a través de la aplicación, recibo la siguiente respuesta y el servidor DataSnap no maneja la llamada: -

{"error":"**Cannot convert JSON value** {\"client_ref\":\"ABC100",\"mileage_type\":\"Fee Work\",\"mileage_description\":\"test\",\"mileage_id\":\"\",\"mileage_date\":\"03\/15\/2012\"} input into TDBXTypes.WideString"}

A continuación se muestra la estructura de la función DataSnap: -

function TServerMethods1.updateSaveMileage(mileage_id: string; 
client_ref: string; mileage_date: String; mileage_type: string; 
mileagefigure: string; description: string; notepad: string): string;

¿Alguna idea de como resolver esto?

preguntado el 03 de mayo de 12 a las 19:05

¿Pudiste solucionar el problema? Tengo el mismo problema... -

1 Respuestas

Sé que esta pregunta es un poco antigua, pero tenía el mismo problema y tampoco pude encontrar una respuesta.

Afortunadamente, después de un par de horas finalmente descubrí cómo resolver este problema.

Todo lo que necesita hacer es modificar su función para aceptar un TJSONObject, de la siguiente manera:

function TServerMethods1.UpdateMethod(AJSONObject: TJSONObject): TJSONObject;
var
  JSONText: string;
begin

  JSONText := AJSONObject.ToJSON;

  // code...

end;

Probado en Delphi 10.1 Berlín.

Respondido 19 Oct 18, 20:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.