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

时间:2018-08-21 20:58:45

标签: go

我在使github.com/xeipuuv/gojsonschema适用于我当前正在构建的REST API时遇到问题。

过程看起来像这样

  • 用户向/ api / books / create发送请求(在这种情况下,我正在发送PUT请求)
  • 用户输入正文参数namecontent
  • 服务器将这些主体参数转换为可读的JSON
  • 服务器尝试使用json模式验证JSON
  • 服务器执行请求

应该的工作方式。

尝试验证JSON时出现此错误,我不知道如何解决。 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\n")
    } else {
        fmt.Printf("The document is not valid. see errors :\n")
        for _, desc := range result.Errors() {
            fmt.Printf("- %s\n", desc)
        }
    }
}

我首先想到的是它会中断,因为r.ParseForm()以一种奇怪的方式输出了东西,但我不确定。

请注意,我要使用一种“通用”方法,因为我正在处理各种请求:GETPOSTPUT等。但是,如果您有一个更好的解决方案,我可以解决这个问题。

感谢您的帮助!

0 个答案:

没有答案