let content_type = request .lines() .find(|line| line.to_ascii_lowercase().starts_with("content-type:")) .unwrap_or(""); let is_json = content_type.contains("application/json"); // pub fn parse_json(body: &str) -> Option<HashMap<String, String>> { let parsed: Result<Value, _> = serde_json::from_str(body); match parsed { Ok(Value::Object(map)) => { let mut result = HashMap::new(); for (k, v) in map { if let Some(s) = v.as_str() { result.insert(k, s.to_string()); } else { result.insert(k, v.to_string()); // fallback } } Some(result) } _ => None, } }
jsonデータの場合は、parse_jsonとしてdataを利用する。
fn handle_api_post(_req: &str, body: String) -> HttpResponse { let data = parse_json(&body).unwrap_or_default(); let binding = "<unknown>".to_string(); let name = data.get("name").unwrap_or(&binding); let message = format!("{{\"greeting\": \"Hello, {}!\"}}", name); let mut response = HttpResponse::new(200, &message); response.headers.insert("Content-Type".to_string(), "application/json".to_string()); response }
なるほどー