我提前为一个很长的问题道歉。希望你能忍受我。
我一直在尝试修改RESTful 示例代码,它将 a 定义Thing
为:
type Thing struct {
Id string
Text string
}
AThing
是通过向 发送HTTP Post
带有适当JSON
正文的请求来创建的http://localhost:9090/things
。这在Create
函数的示例代码中处理,特别是以下行:
dataMap := data.(map[string]interface{})
thing := new(Thing)
thing.Id = dataMap["Id"].(string)
thing.Text = dataMap["Text"].(string)
这一切都很好,我可以运行示例服务器(监听http://localhost:9090/
)并且服务器按预期运行。
例如:
curl -X POST -H "Content-Type: application/json" -d '{"Id":"TestId","Text":"TestText"}' http://localhost:9090/things
返回没有错误,然后我GET
用Thing
curl http://localhost:9090/things/TestId
它返回
{"d":{"Id":"TestId","Text":"TestText"},"s":200}
到目前为止,一切都很好。
现在,我想修改Thing
类型,并添加一个自定义ThingText
类型,如下所示:
type ThingText struct {
Title string
Body string
}
type Thing struct {
Id string
Text ThingText
}
这本身不是问题,我可以Create
像这样修改函数:
thing := new(Thing)
thing.Id = dataMap["Id"].(string)
thing.Text.Title = dataMap["Title"].(string)
thing.Text.Body = dataMap["Body"].(string)
并将上一个curl
POST
请求JSON
设置为:
{"Id":"TestId","Title":"TestTitle","Title":"TestBody"}
它返回没有错误。
GET
我再一次可以Thing
URL 并返回:
{"d":{"Id":"TestId","Text":{"Title":"TestTitle","Body":"TestBody"}},"s":200}
再说一次,到目前为止,很好。
现在,我的问题:
如何修改Create
函数以允许我对其进行POST
复杂化JSON
?
例如,JSON
上面最后返回的字符串包括{"Id":"TestId","Text":{"Title":"TestTitle","Body":"TestBody"}}
. 我希望能够POST
精确JSON
到端点并Thing
创建。
我已经按照代码返回,似乎该data
变量是Context.RequestData()
来自https://github.com/stretchr/goweb/context的类型,而内部Map
似乎是Object.Map
来自https://github.com/stretchr的类型/stew/,被描述为“具有额外有用功能的地图[字符串]界面{}。” 特别是,我注意到“支持点语法来设置深度值”。
我不知道如何设置thing.Text.Title = dataMap...
语句以便将正确的JSON
字段解析到其中。string
除了中的类型之外,我似乎无法使用其他任何东西dataMap
,如果我尝试JSON
它会给出类似于以下内容的错误:
http: panic serving 127.0.0.1:59113: interface conversion: interface is nil, not string
再次为这个荒谬的长问题感到抱歉。我非常感谢您的阅读,以及您可能需要提供的任何帮助。谢谢!