Как передать данные JSON с помощью вызова метода GET в Java RestAPI - PullRequest
0 голосов
/ 18 января 2012

Мне нужно, чтобы мой метод мог принимать данные JSON.Скажем, мне нужно сделать вызов метода GET REST с данными JSON.

GET /player/login/ HTTP/1.0 

Content-Type: application/json
Request Body    
{
                "username": ”xyz”,
                "password": "234fsf34"
}

Я не понимаю, как использовать эти данные JSON в методе REST API.

@GET
@Path("player/login")
@Produces("application/json)
public responseData loginPlayer(){
}

Ответы [ 2 ]

1 голос
/ 19 января 2012

Если вы хотите использовать аутентификацию с GET, «правильный» способ сделать это - использовать базовую аутентификацию доступа.

http://en.wikipedia.org/wiki/Basic_access_authentication

Клиент принимает имя пользователяи пароль и формирует строку вида user:password.Итак, в вашем примере это будет:

"xyz:234fsf34"

Затем клиент base64 кодирует эту строку.Если клиент также является Java, вы можете использовать класс Base64 apache commons для кодирования / декодирования:

http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html

Таким образом, вы получите что-то вроде:

"eHl6OjIzNGZzZjM0"

И клиент отправляет это в GET, но как заголовок HTTP (не тело запроса):

GET /player/login/ HTTP/1.0
  Content-Type: application/json
  Authorization: Basic eHl6OjIzNGZzZjM0

Сервер читает это в заголовке HTTP «Авторизация», так же, как пример кода здесь: https://cwiki.apache.org/WINK/jax-rs-http-headers.html

Затем декодирует его с помощью (Base64 Apache Commons Class).

Затем вы можете ответить на GET с соответствующими данными.

1 голос
/ 18 января 2012

Из синтаксиса видно, что вы используете JAX-RS.

Вам необходимо использовать аннотацию @Consumes.

Документация для @Consumes находится по адресу: http://docs.oracle.com/javaee/6/tutorial/doc/gilik.html#gipyt

Довольно подробное руководство (которое использует Джерси, эталонную реализацию JAX-RS) находится здесь: http://blogs.oracle.com/enterprisetechtips/entry/configuring_json_for_restful_web

В конце концов, ваш метод должен быть определен для принятия десериализации 1014 * Java-объект, соответствующий телу JSON, полученному от клиента, и вам нужно настроить все так, чтобы эта десериализация выполнялась до того, как ваш метод будет вызван.Прочтите вторую ссылку, чтобы узнать, как это сделать.

Примечание: методы GET обычно не имеют «тела запроса».Это немного странно иметь это.Метод POST предназначен для публикации тел запросов.Хотя стандарт HTTP явно не запрещает GET-запросам иметь тело, POST является подходящим выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...