Data Action error: The request could not be understood by the server due to malformed syntax

I got the following error when using filter in GET request,
works fine in postman.

  • Failed due to malformed requestUrlTemplate. Illegal character in query at index 93: https://www.#######.com/demo1/odata/####/tabdem1.ini,3/comp/PHONEBOOK?$filter=PHONENUM eq '0##-#######'

{
"message": "The request could not be understood by the server due to malformed syntax.",
"code": "bad.request",
"status": 400,
"messageParams": {},
"contextId": "4eb06d50-6ee1-43bf-b861-573de15af86f",
"details": [
{
"errorCode": "ACTION.PROCESSING"
}
],
"errors": [
{
"message": "Failed due to malformed requestUrlTemplate. Illegal character in query at index 93: https://www.#######.com/demo1/odata/######/tabdem1.ini,3/comp/PHONEBOOK?$filter=PHONENUM eq '0##-######'",
"code": "BAD_REQUEST",
"status": 400,
"messageParams": {},
"details": [],
"errors": []
}
]
}

We use the '$' as a special character in our processing to signify escaping using the Velocity Template Language. I don't see in our docs where we call out that you shouldn't use an unescaped '$' in your url so I'll see about getting a note in there for future reference.

You need to change your url to switch the '$' with ${esc.dollar} i.e. https://www.#######.com/demo1/odata/####/tabdem1.ini,3/comp/PHONEBOOK?${esc.dollar}filter=PHONENUM eq '0##-#######' and that should get you past this issue.

You may also need to use some of the Velocity Templating to properly escape the value of the $filter query parameter. Please see my link to our Velocity Template Language help page I linked in the beginning and feel free to reach out here if you need any more help.

Hi Trey,
Thanks for the assistance!
I changed it and i'm still getting the same error as below,
Do i need to use the Velocity Templating for that to work?
This is a GET request so I can't use requestTemplate.

Request URL Template:
https://www.#######.com/demo1/odata/#####/tabdem1.ini,3/comp/PHONEBOOK?${esc.dollar}${input.filter}

Execute:
{
"message": "The request could not be understood by the server due to malformed syntax.",
"code": "bad.request",
"status": 400,
"messageParams": {},
"contextId": "f255b356-da14-48fe-b686-88093a4da714",
"details": [
{
"errorCode": "ACTION.PROCESSING"
}
],
"errors": [
{
"message": "Failed due to malformed requestUrlTemplate. Illegal character in query at index 93: https://www.#######.com/demo1/odata/####/tabdem1.ini,3/comp/PHONEBOOK?$filter=PHONENUM eq '###-######'",
"code": "BAD_REQUEST",
"status": 400,
"messageParams": {},
"details": [],
"errors": []
}
]
}

Hello,

In order to troubleshoot and find what's causing an issue in your Data Action, it would be good if you could post/share details on your Data Action - your Input Contract (as JSON) and your Request Configuration (as JSON).

Regards,

Hi Jerome,
I'm currently just trying to use the Request URL Template without contract fields, just to get a valid response, then I will add it as a contact fields.
this is the Request URL Template (I hashed identity values)

{
"requestUrlTemplate": "https://www.##############/demo1/odata/########/tabdem1.ini,3/comp/PHONEBOOK?${esc.dollar}filter=PHONENUM eq '###########'",
"requestType": "GET",
"headers": {
"Authorization": "Basic ################"
},
"requestTemplate": "${input.rawRequest}"
}

Response:
{
"translationMap": {},
"translationMapDefaults": {},
"successTemplate": "${rawResult}"
}

$ is a keyword for the Data Actions. That's why you need to replace it with a Velocity macro - ${esc.dollar}

What is also necessary is to escape certain characters in the url properly.
When you have " " (space) in a url, it will be replaced with %20
When you have ' (single quote), it will be replaced with %27.

So your request template should look like this:

"requestUrlTemplate": "https://www.##############/demo1/odata/########/tabdem1.ini,3/comp/PHONEBOOK?${esc.dollar}filter=PHONENUM%20eq%20%27###########%27"

Let's assume you define an input parameter in your input contract ("phone" of type string).
You would use it the following way in your requestTemplate

"requestUrlTemplate": "https://www.##############/demo1/odata/########/tabdem1.ini,3/comp/PHONEBOOK?${esc.dollar}filter=PHONENUM%20eq%20%27${input.phone}%27"

You can check the answer I gave on this other post.

Regards,

Finally! :slight_smile:
Appreciate the help Jerome,
Thanks!

This topic was automatically closed 31 days after the last reply. New replies are no longer allowed.