Я пытаюсь сделать простой пост в Restlet.
Что происходит, я нажимаю на ссылку, которая отображается в моем index.html, и когда я перехожу к выводу моего сервера, он показывает, что я нажимаю URL-адреса, но никогда не вводит свой метод @Post. Кажется, я правильно следую инструкциям, но, очевидно, что-то здесь не так.
Если я изменю вещи, чтобы получить вместо почты, я могу использовать их в URL, и это работает просто отлично. Но я бы очень хотел посылать вещи по почте, а не получать.
Как мне сделать подачу Restlet в мою почтовую процедуру?
Обновление 1:
Поскольку кажется, что данные, которые я передаю для параметров, являются объектами json, я попытался изменить @Post
на @Post("json")
, но он не внес никаких изменений ...
Ниже приведен дамп кода соответствующих частей, так как я уверен, что хотя бы один из них будет интересен. Я буду отслеживать это для последующих вопросов. Спасибо!
Начало дампа кода:
Вот мой "index.html", бесстыдно адаптированный из руководства по jquery (чтобы дать представление о моем опыте работы с JavaScript).
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
function doit() {
$(document).ready(function() {
$.post(
"http://localhost:15627/system/create",
{ key: "something here", auth: "happy", name: "The name" },
function(data) {
alert("Response: " + data);
}
);
});
}
</script>
</head>
<body>
<a href="javascript:doit()">Link</a>
</body>
</html>
Теперь у меня в Java-рестлете очень простая настройка
public static void main(String[] args) throws Exception {
Component component = new Component();
component.getServers().add(Protocol.HTTP, 15627);
startDatabase();
Application main = new Main();
component.getDefaultHost().attachDefault(main);
component.start();
}
private Engine engine;
public Main() {
this.engine = new Engine();
}
И мой входящий корень
public Restlet createInboundRoot() {
// Create a root router
Router router = new Router(getContext());
router.attach("/system/knock", new Knock(engine));
router.attach("/system/create", new CreatePlayer(engine));
return router;
}
И моя процедура создания игрока
@Post
public Representation create(Representation rep) {
Representation response = null;
Form form = new Form(rep);
String key = form.getFirstValue("key");
String auth = form.getFirstValue("auth");
String name = form.getFirstValue("name");
System.out.println("Creating " + key + " " + auth + " " + name);
String result = engine.create(key,auth,name);
response = new StringRepresentation(result,MediaType.TEXT_PLAIN);
return response;
}
Результат звонка
Oct 12, 2011 3:32:23 PM org.restlet.engine.log.LogFilter afterHandle
INFO: 2011-10-12 15:32:23 127.0.0.1 - - 15627 OPTIONS /system/create - 200 0 0 0 http://localhost:15627 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729) -
Керлинг (следуйте советам, найденным здесь Перезапустите POST, используя JSON
C:\programs\curl>curl -X POST localhost:15627/system/create -H "Content-Type: ap
plication/json" -d '{"key" : "something", "auth" : "happy", "name" : "The name"}
'
curl: (7) couldn't connect to host
curl: (6) Could not resolve host: something,; Host not found
curl: (6) Could not resolve host: auth; Host not found
curl: (7) couldn't connect to host
curl: (6) Could not resolve host: happy,; Host not found
curl: (6) Could not resolve host: name; Host not found
curl: (7) couldn't connect to host
curl: (3) [globbing] unmatched close brace/bracket at pos 9
C:\programs\curl>
И вывод рестлета из скручивания
Oct 12, 2011 3:43:47 PM org.restlet.engine.log.LogFilter afterHandle
INFO: 2011-10-12 15:43:47 127.0.0.1 - - 15627 POST /system/create - 200 0 5 0 http://localhost:15627 curl/7.22.0 (i386-pc-win32) libcurl/7.22.0 OpenSSL/0.9.8r zlib/1.2.5 -
Обновление 2:
Я добавил handle(Request req, Response res)
метод, который в настоящее время отвечает на запросы и сообщения, когда я пытаюсь свернуться. В любом случае он не может извлечь какие-либо данные, связанные с ним.