1

ブラウザに基づいて異なるコンテンツ タイプを返す簡単な方法はありますか?

application/json になると、IEで壁にぶつかっています。ほとんどの場合は機能しますが、機能しない場合もあります。常にJSON オブジェクトを (MappingJacksonHttpMessageConverter を介して) 返したいのですが、IE を使用する場合はコンテンツ タイプを text/plain に設定します。

response.setContentType への書き込みは効果的ではないため、多くのコントローラーがあり、要求ヘッダーがないため、コンバーターを拡張してもあまり役に立ちません..

何か案は?

4

1 に答える 1

2

User-agentを使用して HTTP リクエストからヘッダーを取得し、Spring フレームワークによって自動的に設定されるオブジェクトに@RequestHeader("User-Agent")コンテンツ タイプを設定することができます。HttpServletResponseこれが例です

@Controller
public class FoobarController {

    @RequestMapping("/path")
    @ResponseBody
    public String getContent(@RequestHeader("User-Agent") String userAgent,
                             HttpServletResponse response) {
        if (isIE(userAgent)) {
            response.setContentType("text/plain");
        } else {
            response.setContentType("text/json");
        }
        ...
        return "{\"key\":\"value\"}";
    }
}

そして、これは IE の User-Agent ヘッダーの一部です。

  • Mozilla/4.0 (互換性; MSIE 7.0; Windows NT 6.0; Trident/4.0)
  • Mozilla/4.0 (互換性; MSIE 8.0; Windows NT 6.0; Trident/4.0)
  • Mozilla/5.0 (互換性; MSIE 9.0; Windows NT 6.1; Trident/5.0)

ここをクリックて詳細をご覧ください。

于 2013-07-10T10:12:59.140 に答える