当前位置: 首页 > 知识库问答 >
问题:

SessionAttributes上的Spring Boot不工作

凌征
2023-03-14

我在SpringBoot项目中有一个控制器类,它具有登录功能。当我输入用户名和密码并按submit时,它将使用method=“POST”调用LoginController。我希望当我使用模型添加属性“customer”时,“customer”属性也将通过@SessionAttributes(“customer”)添加到会话中。相反,它返回错误

这里是错误

Expected session attribute 'customer'
org.springframework.web.HttpSessionRequiredException: Expected session attribute 'customer'

这是我的密码

@Controller
@SessionAttributes("customer")
public class LoginController {
    
    @Autowired
    CustomerService customService;
    
    @RequestMapping(method=RequestMethod.GET,value="/login")
    public String login() {
        
        return "login";
    }
    
    @RequestMapping(method=RequestMethod.POST,value="/login")
    public String submitLoginForm(@ModelAttribute Customer customer, Model model) {
                
        model.addAttribute("customer", customService.getCustomer(customer.getUsername(), customer.getPassword()));
                
        return "redirect:/";
    }
    
}```

共有1个答案

金宣
2023-03-14

您必须使用@ModelAttribute(“客户”)

对于eg:

@Service
public class CustomerService {

    @ModelAttribute("customer")
    public Customer getCustomer(String username, String password) {
        return new Customer(username, password);
    }

}

模型对象

public class Customer {

    private String username;
    private String password;

    public Customer(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

控制器

@Controller
@SessionAttributes("customer")
public class LoginController {
    
    @Autowired
    CustomerService customService;
    
    @RequestMapping(method=RequestMethod.GET,value="/login")
    public String login() {    
        return "login";
    }
    
    @RequestMapping(method=RequestMethod.POST,value="/login")
    public String submitLoginForm(Customer customer, Model model, HttpServletRequest request) {            
        model.addAttribute("customer", customService.getCustomer(customer.getUsername(), customer.getPassword()));
        return "redirect:/";
    }
     
}
 类似资料:
  • 我正在学习Spring Boot来构建应用程序。我试图用不同包中的控制器作为应用程序来构建我的第一个Spring Boot应用程序。Tomcat实例出现,但请求没有到达为URI注册的RestController。 以下是控制器类: 以下是应用程序类: Pom.xml tomcat启动时的日志: 我添加了基本包扫描,甚至尝试了注释,但当我点击URL(http://localhost:8080/abc

  • 我有一个Springboot应用程序,我的实体模型与作为依赖项包含的主应用程序分开。 我的Application.java位于此包中 我的实体模型位于这个包com.a.b中的另一个项目中 但是我得到一个错误:由:java.lang.IllegalArgumentException:不是托管类型:类引起

  • 我已经将spring boot嵌入式tomcat服务器中的保持活动超时设置为30秒。因此,我在应用程序中使用下面的内容。JAVA 然后我从我的Rest控制器Hibernate一个请求线程40秒。但是当我通过postman发出请求时,它成功返回HTTP状态代码200,而不是返回网关超时错误。 我尝试setConnectionTimeout和setKeepAliveTimeout,但它不起作用。 我错

  • 我是一个新的springboot和我正在考虑它为一个新的项目。在测试其功能时,我使用@Transactional注释总是失败。 我创建了一个小的MySql数据库,并将其连接到该数据库,设置此application.properties文件: 为什么?

  • 我在我的模型中使用LocalDateTime,在包括LocalDateTimeDeserializer之后,将bean字段转换为 包括 属性在SpringBoot的应用程序中。属性文件,应用程序最终能够反序列化JSON并正确显示如下内容:, 但是,当我进行测试时,它会忽略WRITE_DATES_AS_TIMESTAMPS标志,我猜它会为上面相同的字符串日期生成一个输出, 请注意,在测试资源文件夹中

  • controller.java UserServiceImpl.java 我得到了这个错误 应用程序启动失败 描述: 我使用的SpringBoot版本:2.1.0.发行版