Servant QueryParams parse error
给出以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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 |
我可以访问返回
这与
我的代码有什么问题?
编辑:经过进一步探索,它确实在解析错误时返回http 400。现在,我要更改问题。如何返回自定义错误消息,如果
那会发生吗?
自从仆人0.13起,您可以覆盖它。
如果查看
1 | type QueryParam = QueryParam' '[Optional, Strict] |
-
是否可以在没有该参数值的情况下生存:如果可以,则处理程序得到
Maybe a ,如果没有,则直接得到a ,但是在没有给出值的情况下出错。这是Required 与Optional 。 -
是否希望解码失败是致命的:如果这样做,则解码失败时将为您显示仆人错误,否则处理程序将得到
a 。如果不这样做,那么处理程序将得到一个Either Text a ,然后您可以自由地做任何您想做的事情,以防出现解码错误(这是Either 的Left 情况,带有文本错误消息) 。这是Strict 与Lenient 。
因此,您可能想定义类似
能解决您的问题吗?