带有gojsonschema的REST API:URL中的第一个路径段不能包含冒号

I'm having issues making github.com/xeipuuv/gojsonschema work for my REST API that I'm currently building.

The procedure would look like this

  • User sends request to /api/books/create (in this case I'm sending a PUT request)
  • User inputs body parameters name and content
  • The server converts these body parameters into readable JSON
  • The server tries to validate the JSON using a json schema
  • The server performs the request

or that is how it should work.

I get this error when trying to validate the JSON and I have no clue how to fix it. http: panic serving [::1]:58611: parse {"name":"1","content":"2"}: first path segment in URL cannot contain colon

type CreateParams struct {
    Name     string
    Content        string
}

func Create(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()

    data := &CreateParams{
        Name: r.Form.Get("name"),
        Content: r.Form.Get("Content"),
    }

    jsonData, err := json.Marshal(data)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(string(jsonData))

    schema := `{
          "required": [
            "Name",
            "Content"
          ],
          "properties": {
            "Name": {
              "$id": "#/properties/Name",
              "type": "string",
              "title": "The Name Schema",
              "default": "",
              "examples": [
                "1"
              ],
              "minLength": 3,
              "pattern": "^(.*)$"
            },
            "Content": {
              "$id": "#/properties/Content",
              "type": "string",
              "title": "The Content Schema",
              "default": "",
              "examples": [
                "2"
              ],
              "pattern": "^(.*)$"
            }
          }
        }`
    schemaLoader := gojsonschema.NewStringLoader(schema)
    documentLoader := gojsonschema.NewReferenceLoader(string(jsonData))

    result, err := gojsonschema.Validate(schemaLoader, documentLoader)
    if err != nil {
        panic(err.Error())
    }

    if result.Valid() {
        fmt.Printf("The document is valid
")
    } else {
        fmt.Printf("The document is not valid. see errors :
")
        for _, desc := range result.Errors() {
            fmt.Printf("- %s
", desc)
        }
    }
}

My first thought was that it breaks because r.ParseForm() outputs things in a weird way, but I'm not sure anymore.

Note that I would like to have a "universal" method as I'm dealing with all kinds of requests: GET, POST, PUT, etc. But if you have a better solution I could work with that.

Any help is appreciated!