2013-07-10 3 views
1

Есть ли простой способ вернуть другой тип контента на основе браузера?Весна mvc - @ResponseBody и производится на основе браузера?

Я поражаю стены IE, когда дело доходит до приложения/json. чаще всего это работает, иногда нет. Я хочу, чтобы всегда return json object (через MappingJacksonHttpMessageConverter), но чтобы установить тип содержимого в текст/обычную при использовании IE.

письменной форме response.setContentType не является эффективным, потому что я есть много контроллеров и расширения преобразователя также не очень помогают, так как у меня нет заголовков запроса ..

какие-либо идеи?

+0

т. Е. Обрабатывает приложение/json просто отлично. – NimChimpsky

ответ

2

Вы можете попытаться получить User-agent заголовок из запроса HTTP с помощью @RequestHeader("User-Agent"), а затем установить тип контента в HttpServletResponse объект, который будет автоматически устанавливается на Spring Framework. Вот пример

@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\"}"; 
    } 
} 

А вот часть заголовков 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)

Вы можете нажать here, чтобы увидеть больше.

+0

Спасибо. мы закончили делать что-то подобное. расширяя MappingJacksonHttpMessageConverter и возвращаем текст/plain в заголовке IE. до сих пор тестируется на производстве в течение 2 недель и работает хорошо. –

Смежные вопросы