def save = Action { request: Request[AnyContent] => val body: AnyContent = request.body // デフォルトでは上記のように request.body は AnyContent 型です。 Content-Type ヘッダの値によって適切な型として parse されます。たとえば Content-Type が application/json であれば JSON として parse され、request.body.asJson で JSON が取り出せます。 今回はパースされたボディと共に、生のリクエストボディにアクセスしたいと思いました。 Play では BodyParser[A] が HTTP リクエストボディを解釈します。 その定義 を見るとわかるように RequestHeader => Accumul
 
      
   
     
       
       
       
      ![[PlayFramework]フォームをJSONでPOSTし、バリデーションエラーをJSONで返す - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/0c34b763f2a10e5568ef33b4bddac62ad7af1e41/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fqiita-user-contents.imgix.net%252Fhttps%25253A%25252F%25252Fcdn.qiita.com%25252Fassets%25252Fpublic%25252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%253Fixlib%253Drb-4.0.0%2526w%253D1200%2526blend64%253DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkYwJTJGMTUxNzMwJTJGcHJvZmlsZS1pbWFnZXMlMkYxNTc1NzI4NDYyP2l4bGliPXJiLTQuMC4wJmFyPTElM0ExJmZpdD1jcm9wJm1hc2s9ZWxsaXBzZSZiZz1GRkZGRkYmZm09cG5nMzImcz1lNTU1NDgwYjMxZDllOWVhZjMxZGIwMDA2NTUwOWFmNw%2526blend-x%253D120%2526blend-y%253D467%2526blend-w%253D82%2526blend-h%253D82%2526blend-mode%253Dnormal%2526s%253D4091df129e98a81d978d887f1e12ecfa%3Fixlib%3Drb-4.0.0%26w%3D1200%26fm%3Djpg%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9JTVCUGxheUZyYW1ld29yayU1RCVFMyU4MyU5NSVFMyU4MiVBOSVFMyU4MyVCQyVFMyU4MyVBMCVFMyU4MiU5MkpTT04lRTMlODElQTdQT1NUJUUzJTgxJTk3JUUzJTgwJTgxJUUzJTgzJTkwJUUzJTgzJUFBJUUzJTgzJTg3JUUzJTgzJUJDJUUzJTgyJUI3JUUzJTgzJUE3JUUzJTgzJUIzJUUzJTgyJUE4JUUzJTgzJUE5JUUzJTgzJUJDJUUzJTgyJTkySlNPTiVFMyU4MSVBNyVFOCVCRiU5NCVFMyU4MSU5OSZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1wYWQ9MCZzPWQ2NTE3MjE4MTg5YWZjMTQxMDE2MmZkYWY5ZTMwNjQx%26mark-x%3D120%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBhZ29ldGMmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtcGFkPTAmcz1mYWFhMWE0OTNjOGVmMzI1YWVmNjhjZjBkNTc1NDlkNw%26blend-x%3D242%26blend-y%3D480%26blend-w%3D838%26blend-h%3D46%26blend-fit%3Dcrop%26blend-crop%3Dleft%252Cbottom%26blend-mode%3Dnormal%26s%3Da5db5407db9a0b2fc152d76dd7078ffd) 
       
       
       
       
       
       
       
       
       
       
       
       
       
       
      

