JSON body parsing for iron
Clone or download
FauxFaux and untitaker bump iron to 0.6 (#79)
* bump iron to 0.6

* bump persistent to 0.4

* apply @iori-yja's changes
Latest commit 49ae53c Nov 21, 2017



Build Status Crates.io

Body parsing plugins for the Iron web framework.


extern crate iron;
extern crate bodyparser;
extern crate persistent;
extern crate serde_derive;

use persistent::Read;
use iron::status;
use iron::prelude::*;

#[derive(Debug, Clone, Deserialize)]
struct MyStructure {
    a: String,
    b: Option<String>,

fn log_body(req: &mut Request) -> IronResult<Response> {
    let body = req.get::<bodyparser::Raw>();
    match body {
        Ok(Some(body)) => println!("Read body:\n{}", body),
        Ok(None) => println!("No body"),
        Err(err) => println!("Error: {:?}", err)

    let json_body = req.get::<bodyparser::Json>();
    match json_body {
        Ok(Some(json_body)) => println!("Parsed body:\n{:?}", json_body),
        Ok(None) => println!("No body"),
        Err(err) => println!("Error: {:?}", err)

    let struct_body = req.get::<bodyparser::Struct<MyStructure>>();
    match struct_body {
        Ok(Some(struct_body)) => println!("Parsed body:\n{:?}", struct_body),
        Ok(None) => println!("No body"),
        Err(err) => println!("Error: {:?}", err)


const MAX_BODY_LENGTH: usize = 1024 * 1024 * 10;

// While the example is running, try the following curl commands and see how they are
// logged by the Rust server process:
// `curl -i "localhost:3000/" -H "application/json" -d '{"name":"jason","age":"2"}'`
// `curl -i "localhost:3000/" -H "application/json" -d '{"a":"jason","b":"2"}'`
// `curl -i "localhost:3000/" -H "application/json" -d '{"a":"jason"}'`
fn main() {
    let mut chain = Chain::new(log_body);


body-parser is a part of Iron's core bundle. It contains:

  • Raw - performs body parsing to string with limiting.
  • Json - parses body into Json.
  • Struct - parses body into a struct using Serde.


If you're using a Cargo.toml to manage dependencies, just add body-parser to the toml:


git = "https://github.com/iron/body-parser.git"

Otherwise, cargo build, and the rlib will be in your target directory.


Along with the online documentation, you can build a local copy with make doc.


Get Help

One of us (@reem, @zzmp, @theptrk, @mcreinhard) is usually on #iron on the mozilla irc. Come say hi and ask any questions you might have. We are also usually on #rust and #rust-webdev.