By default you don't need to worry about using the asResult() function because it's already handled by the preextraction when the request is received (which validates the entire contract before the request is received by your handler). Hence you can safely use the requestBody lens without problem. Even if you use a different preExtraction option , the lensfailure will result in a 400 - but since the default behaviour is via exceptions there is no guarantee and there may be some danger there (app design depending)