Перегрузка метода контроллера пружины с тем же отображением запроса - PullRequest
3 голосов
/ 10 октября 2011

У меня есть атрибут сеанса: пользователь, и у меня есть URL-адрес, который я хочу просматривать как вошедшим в систему пользователям, так и публично людям, не вошедшим в систему как пользователь.

Итак, что я хочу сделать, это:

@Controller("myController")
@SessionAttributes({"user"})
public class MyController {

@RequestMapping(value = "/MyPage/{id}", method = RequestMethod.GET)
public ModelAndView getPage(@PathVariable Integer id) {
   return modelandview1;
}

@RequestMapping(value = "/MyPage/{id}", method = RequestMethod.GET)
public ModelAndView getPage(@PathVariable Integer id, @ModelAttribute User user){
  return modelandview2;
}

Однако я чувствую, что это не сработает ... предложения очень приветствуются.

Ответы [ 2 ]

2 голосов
/ 10 октября 2011

Вам нужен только второй метод, тот, который также принимает пользовательский метод.Когда он вызывается без атрибутов запроса, доступных для заполнения модели User, вы просто получаете экземпляр User со всеми нулевыми (или всеми значениями по умолчанию) полями, а затем в теле метода вы соответственно обрабатываете каждую ситуацию

1 голос
/ 10 октября 2011

Я не думаю, что это правильный случай для @SessionAttributes. Эта аннотация обычно используется для сохранения исходного экземпляра объекта поддержки формы, чтобы избежать передачи не относящихся к делу частей его состояния через скрытые поля формы.

Ваш sceanrio совершенно другой, поэтому лучше использовать HttpSession явно:

@RequestMapping(value = "/MyPage/{id}", method = RequestMethod.GET)
public ModelAndView getPage(@PathVariable Integer id, HttpSession session) {
    User user = (User) session.getAttribute(...);
    if (user != null) {
        ...
    } else {
        ...
    }
}

Также обратите внимание, что @ModelAttribute является объектом привязки данных - пользователь может изменить его поля, передав параметры запроса. Вы определенно не хотите этого в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...