所以,我有一個非常簡單的 2 控制器 Spring MVC 應用程式。第一個控制器登錄用戶并將其置于這樣的會話中
model.addAttribute( "user", userDto );
第二個控制器顯示基于 的專案projectId,但希望用戶處于會話中。
@Controller
@SessionAttributes( "user" )
@RequestMapping( value = "/project" )
public class ProjectController {
...
@GetMapping( "/{projectId}" )
public String get( @PathVariable( "projectId" ) String projectId, @SessionAttribute( "user" ) UserDto userDto, Model model ) {
...
第一次呼叫這個控制器作業得很好。但是,如果用戶在 UI 上更改專案(通過select onchange="'location = /project/<some-id-from-select>"),我會收到來自 Spring 的錯誤訊息:
[org.springframework.web.bind.ServletRequestBindingException: Missing session attribute 'user' of type UserDto]
一個請求后會話屬性怎么可能丟失?專案中沒有定義過濾器、安全性或會話/請求特定配置。
uj5u.com熱心網友回復:
好吧,實際上它更容易修復:我忘記添加@SessionAttributes( "user" )第一個控制器,在那里model.addAttribute( "user", userDto );被呼叫。添加后,一切都像魅力一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479463.html
上一篇:Bean無法以不確定的方式初始化
