2012-05-15 5 views
4

Я знаю, что этот вопрос очень похож на this один, но я чувствую, что он отличается от других и достаточно конкретным, чтобы гарантировать свой собственный вопрос здесь.Добавление заголовков в Пружинные контроллеры

Я только что унаследовал проект веб-приложений Java от единственного разработчика, который не оставил документации. Его приложение Spring MVC с основной структурой пакета следующим образом:

com.ourOrg.app.controllers 
    ImageController 
    ProgramController 
    UserController 
com.ourOrg.app.otherPackages 

Каждый Controller класс просто POJO с аннотацией @Controller и @RequestMapping("/blah"). Например:

@Controller 
@RequestMapping("/images") 
public class ImageController() { 
    @RequestMapping(value="/saveImage", method = RequestMethod.POST) 
    @ResponseBody 
    public ResponseEntity<String> saveImage(@RequestParam(value="imageData", required=true) String imageXML, HttpServletRequest request){ 
     // This method gets executed whenever the: 
     // http://ourSite.com/images/saveImage 
     // URL is hit 
    } 
} 

Я попросил, чтобы добавить следующие заголовки HTTP в Спринг конфигурации, так что мы отключить кэширование браузера:

Pragma: нет-кэша

Cache-Control: нет кэша

не Expires: -1

The A связанная с вышеприведенной ссылкой, звучит так, как будто наши контроллеры должны расширять этот класс WebContentGenerator. К сожалению, существуют десятки контроллеров с огромным количеством методов, поэтому рефакторинг каждого из них для расширения или наследования какого-то базового типа на самом деле не является жизнеспособным вариантом (кроме его только)!

Я также видел статьи, которые звучат так, как будто вы должны настроить Spring для использования перехватчиков AOP, которые изменяют ваши заголовки ответов, но теперь я действительно попадаю в незнакомую территорию.

Учитывая нашу настройку и реализацию Spring MVC, самый простой способ добавить эти три простых заголовка к каждому отклику, отправленному сервером (независимо от того, какой контроллер или метод выполняется)?

Заранее благодарен!

+0

Возможно, я ошибаюсь, но вы не можете установить их в объекте HttpServletResponse перед выходом контроллера? Ваши контроллеры должны иметь доступ к этому объекту. – jmort253

+0

Как? Только аннотации делают их контроллерами, но они только расширяют «Object» ... – IAmYourFaja

ответ

3

Надеясь, что вы используете Spring 3, вы можете посмотреть на перехватчик, тогда вам не придется изменять все ваши контроллеры (так как вы сказали, что у вас их много). Похоже, у них уже есть один реализованный, который вы можете использовать. Посмотрите ответ Божо на этот вопрос how to set header no cache in spring mvc 3 by annotation

+0

Я думаю, что если вы можете добавить пример к этому, ваш лучший ответ между вашим и моим. Хорошая идея о перехватчике. +1 – jmort253

+0

Я стесняюсь на самом деле сдуть это примером, потому что это действительно просто ответ Божо, поэтому я предпочел бы, чтобы люди пошли на этот вопрос и подняли его ответ, так как он его заслужил. – digitaljoel

+0

Справа.Делает смысл :) – jmort253

-1

Я понимаю, что это старый пост, но, возможно, это поможет кому-то. Я использую весну для этого примера. Главное - использовать аннотацию для параметров.
@Controller общественного класса HelloController {

@RequestMapping(value = "/hello.htm") 
public String hello(@RequestHeader(value="User-Agent") String userAgent) 

    //.. 
} 

}

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