经过一番反复试验,我设法在 Yesod 中创建了以下函数,以从 JSON POST 中获取对象,创建EventFolder
实体并将其保存到数据库中。
postAddEventFolderR :: Handler RepJson
postAddEventFolderR = do
r <- waiRequest
v <- liftIO . runResourceT $ requestBody r $$ sinkParser json
let v1 :: EventFolder
v1 = case fromJSON v of
Success a -> a
Error s -> error s
runDB $ insert $ v1
return $ RepJson $ toContent $ show v1
测试功能看起来像curl -H "Content-Type: application/json" -X POST -d '{"name":"test_folder"}' http://localhost:5000/AddEventFolder
.
问题是,首先,有没有更简洁的方法来编写这个函数——它似乎相当冗长。其次,我如何从 JSON 中提取一般创建对象的函数?所以我想最终得到类似的东西
postAddEventFolderR = do
v1 = extractEntityFromJsonPost (whatever params) :: EventFolder
runDB $ insert $ v1
return $ RepJson $ toContent $ show v1
注意我对 Haskell 完全陌生。