GeneXus - Código de estado personalizado en error de servicio rest

 
Vista:
sin imagen de perfil

Código de estado personalizado en error de servicio rest

Publicado por Diego (5 intervenciones) el 03/10/2022 15:13:02
Estimados,

Estoy desarrollando un servicio rest en genexus 16 U5 que necesito exponer, pero no veo la forma de retornar un error programable en formato json y que el codigo de estado no sea por defecto el 200, es decir, devolver un Json con error y mostrar el código 422 por ejemplo.

Probé con código Java y devuelve el código señalado, pero se muestra la página Html por defecto de ese código, y no retorna el Json.

&statusCode = 422
java httpContext.sendError([!&statusCode!]);
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Pablo Dante
Val: 10
Ha aumentado 1 puesto en GeneXus (en relación al último mes)
Gráfica de GeneXus

Código de estado personalizado en error de servicio rest

Publicado por Pablo Dante (38 intervenciones) el 04/10/2022 13:12:27
Buen día
Para poder comprender lo que querés hacer...
Para enviar los datos por protocolo REST, debés tener un SDT de tipo colección o no; dentro debería tener dos elementos Error y DescripErr
entonces programas que si el tipo de error es igual a 422 que te retorne el json que necesitas. Se me ocurre, faltaría que explayes un poco más lo que querés hacer.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Código de estado personalizado en error de servicio rest

Publicado por Diego (5 intervenciones) el 04/10/2022 13:34:07
Buen dia, tal cual como comentas, tengo un servicio Rest que necesito exponer y cuando tenga un error programable por funcionalidad retornar ese sdt convertido en Json con un código Http distinto al 200

Ejemplo: Si es que mi funcionalidad requiere que el nombre del proveedor sea obligatorio retornar el sdt de error indicando "Ingrese nombre de proveedor, es dato obligatorio" y que el código de la solicitud sea devuelta con Http sea un 422.

Lo que no logro realizar es que se retorne el error 422 y ver el Json con el error, solo puedo ver el Json con código http 200.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pablo Dante
Val: 10
Ha aumentado 1 puesto en GeneXus (en relación al último mes)
Gráfica de GeneXus

Código de estado personalizado en error de servicio rest

Publicado por Pablo Dante (38 intervenciones) el 04/10/2022 14:10:33
Hola diego.
Ahora comprendo un poco mejor.
El tema es que el error 422 te lo va a retornar cuando pase lo siguiente; "La petición estaba bien formada pero no se pudo seguir debido a errores de semántica." O sea es un error se refiere a nivel de mal nombre o designación en alguno de los parámetros que no machea bien o sea en error del lado del Cliente. Estoy en lo correcto es eso lo que deseas capturar!!?
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Código de estado personalizado en error de servicio rest

Publicado por Diego (5 intervenciones) el 04/10/2022 14:28:00
Pablo gracias por tu rápida respuesta,

En este caso yo expongo el servicio rest, pero requiero que cuando por el lado del cliente no se incluya algún dato necesario como parámetro, o que por ejemplo cuando el dato que ingrese el cliente supere X caracteres en el nombre del proveedor retornar el error en formato Json en conjunto al código http 422.

No se si es viable realizar esa acción por genexus, como mencioné en el primer mensaje logré forzar a que mi servicio retornara un error 422 con código Java pero en la respuesta no se incluye automáticamente el Json. ¿O siempre deberá retornar un código 200, aunque mi servicio tenga errores al validar un parámetro?

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pablo Dante
Val: 10
Ha aumentado 1 puesto en GeneXus (en relación al último mes)
Gráfica de GeneXus

Código de estado personalizado en error de servicio rest

Publicado por Pablo Dante (38 intervenciones) el 04/10/2022 14:55:30
Hola Diego
Lo conveniente del manejo de Errores en un WSDL ya se SOAP o REST es hacerlo personalizado dentro del SDT que se envía.
Los errores de tipo HTTP sugiero hacerlos con el Tipo de Dato "HTTPClient" que tiene la propiedad "StatusCode" donde podrías capturar el error 422 ( del lado del cliente).
En tu caso al hacer: "el lado del cliente no se incluya algún dato necesario como parámetro, o que por ejemplo cuando el dato que ingrese el cliente supere X caracteres en el nombre del proveedor retornar el error"; es mejor manejarlo desde el procedimiento y retornando diferentes códigos de errores personalizados.
El código HTTP 422 no es propio de tu REST sino de la comunicación entre el Servicio y el Cliente.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar