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
}
なるほどー