Как работает 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.

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


person Baptiste Vadé    schedule 15.01.2019    source источник


Ответы (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
person Caio    schedule 15.01.2019
comment
Да, это я из-за бессонницы. Но с командой curl у меня такое же поведение. - person Baptiste Vadé; 15.01.2019
comment
Можешь еще раз проверить? Я без проблем скомпилировал и выполнил тот же код на своем компьютере. Взгляните: i.imgur.com/uLZA5L4.png - person Caio; 15.01.2019
comment
Я создал новый проект, скопировал и вставил свой код.... и он работает, но не на моем старом.. странно. Благодарю вас ! - person Baptiste Vadé; 15.01.2019