给定以下代码:
newtype HelloMessage = HelloMessage { msg :: String }
deriving (Generic)
instance ToJSON HelloMessage
type API2 = "hello"
:> QueryParam "age" Int
:> Get '[JSON] HelloMessage
appAPI2 :: Proxy API2
appAPI2 = Proxy
myHandler :: Server API2
myHandler = helloHandler
where
helloHandler :: Maybe Int -> Handler HelloMessage
helloHandler mAge =
let
sAge = case mAge of
Nothing -> "0"
Just ag -> show ag
in
return . HelloMessage $ sAge
app2 :: Application
app2 = serve appAPI2 myHandler
main :: IO ()
main = run 8080 app2
我可以访问/hello
which return{ "msg" : 0}
或/hello?age=20
which returns { "msg" : 20}
。但是,如果我将年龄设置为不可解析的非整数,例如"foobar"
使 url 成为/hello?age=foobar
并访问它,它会返回一条关于解析错误的错误消息"foobar"
。
如果我给予相同的处理,它的行为会有所不同,Capture
它只会返回一个 http 400。
我的代码有什么问题?
编辑:经过进一步探索,它确实在解析错误时返回 http 400。现在我换个问题。如果发生这种情况,如何返回自定义错误消息?