Чтение данных запроса на RESTlet - PullRequest
2 голосов
/ 18 июля 2011

Я пытаюсь создать спокойный сервис, используя GAE и RESTlet на стороне сервера и jQuery на стороне клиента.Несмотря на очень скудную документацию по RESTlet, я полон решимости ознакомиться со спокойной структурой.Однако я даже не могу извлечь из этого базовую функциональность.

Проблема, с которой я столкнулся, заключается в том, что из GET, POST, PUT и DELETE появляются только запросы DELETE для доставки части данных.

Вызовы выполняются следующим образом:

function put() {
    try {
        $.ajax({
            url : url,
            type : "PUT", //Same for GET, POST and DELETE
            data : data,
            success : function(data) {
                try {
                    $("#results").text(data);
                } catch (e) {
                    alert(e);
                }
            }
        });
    } catch (e) {
        alert(e);
    }
}

На стороне сервера у меня есть ресурс, подключенный к маршрутизатору, и он выглядит так:

public class TaskResource extends ServerResource
{
    String  userID  = "jada";

    @Override
    public void doInit()
    {
        super.doInit();
        userID = (String) getRequestAttributes().get("user");
    }

    @Get
    public String toString(String str)
    {
        return "GET: task of " + userID + "  |||  DATA: " + str;
    }

    @Put
    public String putit(String str)
    {
        return "PUT: task of " + userID + "  |||  DATA: " + str;
    }

    @Post
    public String postit(String str)
    {
        return "POST: task of " + userID + "  |||  DATA: " + str;
    }

    @Delete
    public String deleteit(String str)
    {
        return "DELETE: task of " + userID + "  |||  DATA: " + str;
    }
}

Вв четырех случаях выше, когда str, GET получает пустой аргумент (понятно), PUT и POST получают пустые строки, а DELETE получает фактически отправленные данные.

Я экспериментировал с изменением типа аргументов (на Представление илиФорма) и с более конкретными аннотациями (например, @Get ("xml")).Пока безуспешно.

Любые рекомендации приветствуются.

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Рекомендация: используйте документально оформленную структуру ReST. Они определенно там. Джерси , например, действительно легко установить и запустить, и его преимущество состоит в том, что он представляет собой реализацию JAX-RS, в которой есть несколько других зрелых реализаций, с которыми вы можете поиграть, как только вы изучите API.

1 голос
/ 18 июля 2011

Итак, вы пытаетесь получить объект запроса.Я не уверен, должны ли методы, отмеченные @Put или @Post, автоматически передавать объект запроса, как вы ожидаете.Я не уверен, почему это работает для DELETE, хотя и не другие.В любом случае, попробуйте код ниже и посмотрите, получите ли вы что-нибудь.Если getEntityAsText() все еще появляется пустым, вероятно, что-то еще происходит.

Попробуйте это:

@Put
public String putit() {
   return this.getRequest().getEntityAsText();
}
...