Я начал создавать приложения с Спринг-Роо 1.3.1 и Спринг-Security 3.1.7Spring LazyInitializationException при использовании «переадресовать» в контроллере
Я использую Spring OpenEntityManagerInViewFilter
, чтобы быть в состоянии сделать отложенную загрузку моего домена объекты.
Это прекрасно работает. Тем не менее, я столкнулся следующая проблема при выполнении редирект из контроллера:
@RequestMapping(method = RequestMethod.PUT, produces = "text/html")
public String update(@Valid Service service, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) {
if (bindingResult.hasErrors()) {
populateEditForm(uiModel, service);
return "services/update";
}
uiModel.asMap().clear();
serviceRepository.save(service);
return "redirect:/services/" + encodeUrlPathSegment(service.getId().toString(), httpServletRequest);
}
Это перенаправление return "redirect:/services/" + encodeUrlPathSegment(service.getId().toString(), httpServletRequest);
не удается с LazyInitializationException
. Он не работает при выполнении цепочки фильтров после совершения фиксации и происходит перенаправление. Переадресованный URL работает при прямом доступе.
При использовании return "forward:/services/" + encodeUrlPathSegment(service.getId().toString(), httpServletRequest);
страница загружена просто отлично.
Я действительно не знаю, почему сеанс спящего режима недоступен при использовании «перенаправления». Еще одна странная вещь: активизация регистрации DEBUG для org.springframework.security.web
также отлично работает.
например. log4j.logger.org.springframework.security.web=DEBUG
Я уже искал в интернете какие-то намеки, но обычно ленивая загрузка работает в моем приложении, это просто в этом случае, и в настоящее время я не совсем понимаю почему.
Любые комментарии/подсказки приветствуются.
Благодаря Стефан
Проведенные дополнительные исследования и обнаружили, что метод, созданный Roo, «toString» использует метод ReflectionToStringBuilder.toString'. Это, похоже, вызывает проблему, так как во время перенаправления сеанс недоступен для этого метода. Это происходит только в объекте Domain Domain, загруженном во время инициализации Spring Security. Все еще не знаю, почему работает «forward:» в методе обновления. Любые идеи? Какая разница? – Stefan