Как работает Json<T> (данные формы не имеют тип содержимого формы)
Я совершенно новый для ржавчины. Я пытаюсь создать очень простой API с ракетой. У меня есть следующий маршрут, который не работает, и я не знаю почему.
#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use] extern crate rocket;
use rocket_contrib::json::Json;
use serde::{Serialize, Deserialize};
use serde_json::Result as JsonResult;
#[derive(Serialize, Deserialize)]
struct Article {
id: usize,
title: String,
body: String,
}
#[post("/new", format = "application/json", data = "<article>")]
fn create_article (article: Json<Article>) -> JsonResult<()> {
println!("Article is: id:{}, title:{}, body:{}", article.id, article.title, article.body);
Ok(())
}
fn main() {
rocket::ignite()
.mount("/article", routes![create_article])
.launch();
}
Когда я отправляю запрос, у меня есть следующее:
POST /article/new?id=1&title=titre&body=corps application/json:
=> Matched: POST /article/new (create_article)
=> Warning: Form data does not have form content type.
=> Outcome: Forward
=> Error: No matching routes for POST /article/new?id=1&title=titre&body=corps application/json.
=> Warning: Responding with 404 Not Found catcher.
=> Response succeeded.
Кто-нибудь может мне помочь?
1 ответ
Решение
Вы запрашиваете POST
конечная точка, как GET
конечная точка, предоставляя параметры в URL. Попробуйте следующее с curl
:
curl -d '{"id": 1, "title": "titre", "body": "corps"}' -H "Content-Type: application/json" -X POST http://localhost:8000/article/new