Я не знаю, сказал ли я, что они - когда-либо действительно благо, но я думаю, что они могут, конечно, быть ценными. Я работал над системой в течение нескольких лет в страховой индустрии, где механизм правил использовался вполне успешно, чтобы позволить бизнес-пользователям создавать правила, которые определили, какие политики были законны, в зависимости от состояния.
, Например, если у Вас должна была быть доплата в определенных состояниях или определенных комбинациях франшизы и доплаты, не были позволены, или из-за соображений продукта, или потому что это было просто недопустимо из-за государственного закона.
количество состояний, что компания, управляемая в, наряду с постоянным изменением в правилах (ежеквартально), сделала бы это головокружительной практикой кодирования. Что еще более важно, это не находится в экспертных знаниях программиста. Это добавляет дополнительную бессмысленную коммуникацию, где конечный пользователь описывает правило, которое будет помещено в действительности в программиста, который не является экспертом по страховой индустрии как, они.
Разработанный правильно, механизм правил может все еще включить систему организации технологических процессов, которая допускает хорошее тестирование. В этом случае правила были сохранены в базе данных, и были базы данных QA и PROD. Таким образом, BA мог протестировать их правила в QA и затем продвинуть их для ПОДТАЛКИВАНИЯ.
Как с чем-либо, обычно о реализации а не фактической технике.
org.springframework.web.servlet.support.WebContentGenerator , который является базовым классом для всех контроллеров Spring, имеет довольно много методов, работающих с заголовками кеша:
/* Set whether to use the HTTP 1.1 cache-control header. Default is "true".
* <p>Note: Cache headers will only get applied if caching is enabled
* (or explicitly prevented) for the current request. */
public final void setUseCacheControlHeader();
/* Return whether the HTTP 1.1 cache-control header is used. */
public final boolean isUseCacheControlHeader();
/* Set whether to use the HTTP 1.1 cache-control header value "no-store"
* when preventing caching. Default is "true". */
public final void setUseCacheControlNoStore(boolean useCacheControlNoStore);
/* Cache content for the given number of seconds. Default is -1,
* indicating no generation of cache-related headers.
* Only if this is set to 0 (no cache) or a positive value (cache for
* this many seconds) will this class generate cache headers.
* The headers can be overwritten by subclasses, before content is generated. */
public final void setCacheSeconds(int seconds);
Они могут либо вызываться в вашем контроллере перед генерацией контента или указываться как свойства bean-компонента в контексте Spring.
Вы можете использовать обработчик-перехватчик и использовать предоставленный им метод postHandle:
postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
, затем просто добавьте в метод заголовок, как показано ниже:
response.setHeader("Cache-Control", "no-cache");
Ответ довольно прост:
@Controller
public class EmployeeController {
@RequestMapping(value = "/find/employer/{employerId}", method = RequestMethod.GET)
public List getEmployees(@PathVariable("employerId") Long employerId, final HttpServletResponse response) {
response.setHeader("Cache-Control", "no-cache");
return employeeService.findEmployeesForEmployer(employerId);
}
}
Код выше показывает именно то, чего вы хотите добиться. Вам нужно сделать две вещи. Добавить "final HttpServletResponse response" в качестве параметра. А затем установите для заголовка Cache-Control значение no-cache. Можно расширить AnnotationMethodHandlerAdapter для поиска пользовательской аннотации управления кэшем и установить http-заголовки соответствующим образом.