मैंने निम्नलिखित का उपयोग करके हाइपर में POST विधि से डेटा निकालने में कामयाब रहा है:

use hyper::service::{make_service_fn, service_fn};
use hyper::{Body, Method, Request, Response, Server};
use std::convert::Infallible;
use std::net::SocketAddr;
use tokio;

async fn handle(_req: Request<Body>) -> Result<Response<Body>, hyper::Error> {
    match (_req.method(), _req.uri().path()) {
        (&Method::GET, "/") => Ok(Response::new(Body::from("this is a get"))),

        (&Method::POST, "/") => {
            let byte_stream = hyper::body::to_bytes(_req).await?;
            let _params = form_urlencoded::parse(&byte_stream)
                .into_owned()
                .collect::<HashMap<String, String>>();

हालाँकि, संपूर्ण JSON निकाय अभी HashMap में केवल एक कुंजी है। मैं इसे कैसे विभाजित कर सकता हूं, इसलिए मेरे पास एक हैशपैप है जिसमें कई कुंजी और मान हैं, एक कुंजी के विपरीत जो कि संपूर्ण शरीर है?

[dependencies]
futures = "0.1"
hyper = "0.13"
pretty_env_logger = "0.3.1"
url = "2.1.1"
tokio = { version = "0.2", features = ["macros", "tcp"] }
bytes = "0.5"
0
max89 24 मार्च 2020, 02:34

1 उत्तर

सबसे बढ़िया उत्तर

आपके विवरण के बीच एक विसंगति है:

हालांकि, संपूर्ण JSON निकाय

और आपका कोड:

let _params = form_urlencoded::parse(&byte_stream)

अगर आपका डेटा JSON है, तो उसे serde_json क्रेट का उपयोग करके JSON के रूप में पार्स करें:

let _params: HashMap<String, String> = serde_json::from_slice(&byte_stream).unwrap();
2
Shepmaster 24 मार्च 2020, 16:41