皆さん、同じリソースの JSON および HTML 表現に同じルートを再利用した Web アプリケーションがあります。ここでは、/foo/details と呼びましょう。このページは /bar/details からリンクされています。(したがって、/bar/details を見ると、-> /foo/details へのリンクが表示されます)。
最初のページから 2 番目のページに移動すると、すべて正常に動作します。Chrome で戻るボタンをクリックすると、元のページが HTML ではなく JSON として表示されます。ブラウザーで更新を押すと、JSON ではなく HTML 表現が取得されます。
JSONとHTMLを検出するために使用しているコードは次のとおりです。
res.result.map { group =>
render {
case Accepts.Html() => Ok(views.html.groups.details(group))
case Accepts.Json() => Ok(Json.toJson(group))
}
}.getOrElse(NotFound)
これはこのパターンの標準的な実装であり、特定の状況で Chrome の [戻る] ボタンを使用する場合を除いて、どこでも機能します。
私がクリアしていない値がありますか、私のページがAjaxで行っていることで、PlayがJsonでレンダリングするのを混乱させていますか、またはChromeがページをキャッシュしていますが、間違った受け入れヘッダーをキャッシュしていますか??
Json用とHtml用の2つの異なるルートを使用することでこれを回避できますが、あきらめているように感じて嫌いです。
戻るボタンのみでこの動作を引き起こす原因について、誰か考えがありますか?