Сервис Resteasy, ожидающий 2 объекта json - PullRequest
3 голосов
/ 04 декабря 2010

У меня есть служба, которая ожидает 2 объекта ... Аутентификация и Клиент.Оба сопоставлены правильно.

Я пытаюсь использовать их как Джсон, но мне трудно это делать.Если я укажу только один параметр, он будет работать нормально, но как я могу вызвать этот сервис, передавая 2 параметра?Всегда давайте мне какое-то исключение.

Вот мой сервис отдыха:

@POST
@Path("login")
@Consumes("application/json")
public void login(Authentication auth, Client c)
{
    // doing something
}

А вот мой потребитель PHP:

$post[] = $authentication->toJson();
$post[] = $client->toJson();

$resp = curl_post("http://localhost:8080/login", array(),
            array(CURLOPT_HTTPHEADER => array('Content-Type: application/json'),
                  CURLOPT_POSTFIELDS => $post));

Я пробовал несколько вариантов того, чтовключил CURLOPT_POSTFIELDS, но не смог заставить его работать.

1 Ответ

0 голосов
/ 19 марта 2012

Возможно, проблема в том, что вы объявляете $ post массивом с номером, который, вероятно, содержит ключи массива, которые вы отображаете. По сути, это то, что вы ему даете:

Array(
     1 => Array(
          'authentication' => 'some data here'
     ),
     2 => Array(
          'client' => 'some more data here'
     )
)

На самом деле вы должны создать переменную $ post следующим образом:

Array(
     'authentication' => 'some data here',
     'client' => 'some more data here'
)

Попробуйте изменить код на что-то вроде этого (не оптимально, но должно выполнить работу):

$authentication = $authentication->toJson();
$client = $client->toJson();
$post = array_merge($authentication, $client);

$resp = curl_post("http://localhost:8080/login", array(),
        array(CURLOPT_HTTPHEADER => array('Content-Type: application/json'),
              CURLOPT_POSTFIELDS => $post));
...