2013-01-17 48 views
0

我想要做一個與Spring服務器通信的簡單的android應用程序。Spring MVC中的會話管理

我想使用會話來存儲每個登錄用戶的數據。 我的應用交換的Json與服務器對象和請求映射是這樣的:

@Controller 
public class LoginController { 

@Autowired 
private IUserDao userDao; 

@RequestMapping(value = "/loginJson",method = RequestMethod.POST) 
public @ResponseBody loginResponse login(@RequestBody loginModel login) { 
    loginResponse response=userDao.checkCredentials(login.getUsername(),login.getPassword()); 
    System.out.println("Result="+response.isSuccess()); 
    System.out.println("Received:"+login.getUsername()+" "+login.getPassword()); 

    return response; 

} 
} 

控制器工作正常,但我無法弄清楚如何存儲sessione變量。我發現了許多解釋春季會議的文件,但每個文件都與其他文件不同。

有人可以建議我一些簡單的方法來做到這一點或一些好的教程?

回答

0

不知道你說春季會議的意思,但你可以在你的方法聲明額外的HttpSession的參數,然後做你的方法裏面喜歡。這是你想要發現的嗎?

+0

是的,我寫的春季會議,但它實際上HttpSession中的。 – Mircb

0

我改變了我的控制,但它給了我一個例外: java.lang.IllegalStateException:

@SessionAttributes("loginsession") 
public class LoginController { 

@Autowired 
private IUserDao userDao; 

@ModelAttribute("loginsession") 
public loginSession getSess(Model model){ 
    return new loginSession(); 
} 

@RequestMapping(value = "/loginJson",method = RequestMethod.POST) 
public @ResponseBody loginResponse login(@RequestBody loginModel login, 
     @ModelAttribute("loginsession") loginSession sess) { 
    loginResponse response=userDao.checkCredentials(login.getUsername(),login.getPassword()); 
    sess.setName(login.getUsername()); 
    System.out.println("Result="+response.isSuccess()); 
    System.out.println("Received:"+login.getUsername()+" "+login.getPassword()); 

    return response; 

} 

是:響應一直致力於

後,現在我的控制器不能創建一個會話這是什麼意思與「在您的方法中的額外HttpSession參數」? 我很抱歉,但我很新的春天....

+0

我有使用Spring 3.2.1完全相同的問題,你是否設法解決它? –

+0

花了一些時間研究後,我想出了以下黑客攻擊。更改方法的簽名'getSess()'所以它接受一個額外的'的HttpRequest req'參數,並添加行'req.getSession();只是return語句之前'同樣的方法體。雖然,這將擺脫'IllegalStateException'的通過確保會話完成請求之前存在,並且應用程序似乎是正常的工作,我不知道這是否是解決問題的理想方式。 –

+0

上面的'HttpServletRequest'而不是'HttpRequest'。 –