Newbie: Как получить данные объекта формы HTML в моем случае в Джерси? - PullRequest
3 голосов
/ 13 мая 2011

Когда клиентская сторона отправляет HTML-форму , она отправляет объект формы на сервер, например:

params={username: USER_INPUT_USERNAME,
       passworkd: USER_INPUT_PASSWORD}

Затем клиент ajax отправляет объект params на мой Jersey сервер.

На стороне сервера, как я могу получить и проанализировать эти данные объекта формы HTML params:

@GET
@Produces({MediaType.APPLICATION_JSON})
public FormResult getFormResult(@QueryParam("params") Object params) {
                 //How can I define the type of the "params" I received?
                 //Do I need to create a Java Bean which represent the HTML form, 
                 //and use the bean as the type of paprams? or any other way?
}

(В приведенном выше коде тип возврата FormResult - это боб POJO, который описывает результат для ответа клиенту)

Когда я получаю params данные объекта формы HTML, как я могу определить тип для params? (Выше я определил его с типом "Object", что неправильно) .

Должен ли я определить POJO bean для представления формы HTML и использовать этот bean для описания типа params ?? или любым другим способом на Джерси?

(Если создать bean-объект POJO для формы HTML, если на форме HTML есть флажки *1034*, params будет динамическим объектом, только проверенное поле будет добавлен объект params, что тоже является проблемой)

Кто-нибудь может помочь?

1 Ответ

3 голосов
/ 13 мая 2011

@QueryParam отображает отдельный параметр queryString, поэтому для запроса GET вам необходимо перечислить все ваши параметры в качестве аргументов метода:

@GET
getFormResult(@QueryParam("name") String name, @QueryParam("age") int age, ... )

Если упомянутый вами paramsфактически один параметр строки запроса (http://your.rest.service?params=somethingHere), вы можете сопоставить его с некоторым классом, у которого есть конструктор, принимающий String, или статический метод valueOf(String), где вы выполняете фактический анализ.

@GET
getFormResult(@QueryParam("params") FormData formData);

И класс FormData может выглядеть следующим образом:

public class FormData {
    public FormData(String s) {
        // populate fields based on the content of s
    }

    // getters / setters / whatever ...
}

РЕДАКТИРОВАТЬ: Для флажков, это не так динамично, как выглядит: они имеют одно и то же имя, так что вы будете иметь один, несколько- или никакие значения, связанные с этим именем, в зависимости от того, что проверял пользователь.Следовательно, @QueryParam("chk") String[] checkedValues должно быть достаточно для обработки «динамических» аспектов здесь (на самом деле «многозначное» было бы более подходящим словом).

...