#json #coldfusion #cfc
#json #coldfusion #cfc
Вопрос:
Я впервые пишу cfc, который будет перехватывать данные в формате JSON с внешнего веб-сервера, на котором будет размещаться информация.
Я работаю с новой службой, которую можно настроить на отправку нам через HTTP POST на указанный мной URL-адрес пакета JSON информации о неудачных транзакциях.
Я решил настроить CFC с удаленным доступом для захвата и десериализации данных JSON во что-то, с чем мы могли бы затем действовать. Однако я не могу понять, как настроить функцию в CFC для получения данных?
Я установил URL в www.mydomain.com/com/processRemote.cfc?method=catchJSONdataamp;ReturnFormat=json
Чтобы протестировать это, я настраиваю простую тестовую страницу, на которой должны публиковаться данные сеанса:
<cfhttp
result="result"
method="post"
url="http://www.mydomain.com/com/processRemote.cfc?method=catchJSONdataamp;ReturnFormat=json">
<cfhttpparam type="header" name="content-type" value="application/json"/>
<cfhttpparam type="body" value="#serializeJSON(session)#"/>
Итак, где я теряюсь, это какое имя cfargument у меня было бы в моем cfc, в котором я изначально сохранял бы данные JSON? У меня нет контроля над удаленной службой, которая отправляла бы данные в формате JSON.
Спасибо,
Ответ №1:
Если вы читаете содержимое из тела HTTP-запроса, вы не найдете его в области аргументов — вам нужно извлечь его непосредственно из запроса:
if (cgi.content_type EQ "application/json")
{
myData = deserializeJSON(ToString(getHTTPRequestData().content));
}
Я использую фреймворк Taffy [1] для создания подобных сервисов (отказ от ответственности: На самом деле я помог написать часть фреймворка, которая обрабатывает этот случай).
Комментарии:
1. Спасибо bpanulla! Я пытался создать cfc, который принимал бы опубликованные данные напрямую. Используя ваш ответ, я создал страницу cfm, которая принимает данные, проверяет, что это то, что мы ожидаем, а затем передает их cfc для обработки.
2. Этот же метод должен работать так же хорошо в вашем методе CFC. Вашему CFC не нужно определять какие-либо аргументы (CFARGUMENT или script).
3. Это чертовски раздражало меня в течение нескольких часов… Если я получаю сообщение, я бы ожидал, что данные будут в области формы! Очевидно, нет, если это JSON, опубликованный в теле. Ах, ну что ж, урок усвоен. Приветствия.