Я использую curl
для тестирования API создания учетной записи пользователя следующим образом:
curl -s -X POST "https://$APISERVER/users" \
-H 'Content-Type: application/json' \
-d '{ \
"username": "'$NEWUSERNAME'", \
"firstName": "'$NEWUSERFIRSTNAME'", \
"lastName": "'$NEWUSERLASTNAME'", \
"displayName": "'$NEWUSERDISPLAYNAME'", \
"password": "'$NEWUSERPASSWORD'" \
}'
и переменные предоставляются через аргументы командной строки:
APISERVER=http://localhost:8080
NEWUSERNAME=$1
NEWUSERPASSWORD=$2
NEWUSERFIRSTNAME=$3
NEWUSERLASTNAME=$4
# Calculated variable
NEWUSERDISPLAYNAME="${NEWUSERFIRSTNAME} ${NEWUSERLASTNAME}"
Пример вызовасценарий выглядит следующим образом: ./test-new-user.sh jdoe Hello123 John Doe
, в результате чего получаются следующие значения переменных:
NEWUSERNAME=jdoe
NEWUSERPASSWORD=Hello123
NEWUSERFIRSTNAME=John
NEWUSERLASTNAME=Doe
(я намеревался установить NEWUSERDISPLAYNAME
в «Джон Доу»)
Но я получаю исключение от сервера, потому что полезная нагрузка в команде curl
выглядит обрезанной, неполной или неправильно сформированной.
JSON parse error: Unexpected end-of-input in VALUE_STRING\n at [Source:
java.io.PushbackInputStream@2eda6052; line: 1, column: 293]; nested
exception is com.fasterxml.jackson.databind.JsonMappingException:
Unexpected end-of-input in VALUE_STRING\n at [Source:
java.io.PushbackInputStream@2eda6052; line: 1, column: 293]\n at
[Source: java.io.PushbackInputStream@2eda6052; line: 1, column: 142]
(through reference chain:
com.mycompany.api.pojos.NewUser[\"displayName\"])"
Если я жестко кодирую значение для displayName
в приведенной выше команде curl (как показано ниже) запрос на создание пользователя проходит и отлично работает.
"displayName": "John Doe", \
Я подозреваю, что это связано с пробелом в displayName
и тем, как я вставляю значение дляdisplayName
с использованием "'$NEWUSERDISPLAYNAME'"
.Есть ли безопасный способ замены переменных в полезной нагрузке POST-запроса команды curl
?