java Spring MVC:客户端发送的请求语法不正确

r6hnlfcb  于 2023-04-04  发布在  Java
关注(0)|答案(2)|浏览(157)

我在Spring MVC Controller中尝试使用@SessionAttribute时遇到了一些问题。我已经保存了会话,但是当我再次向视图显示会话时,它给出了一个错误:
HTTP状态400 -错误请求:客户端发送的请求语法不正确。
但当我删除@SessionAttribute它工作正常

@Controller
@RequestMapping("login/")
public class LoginController {
    
    @GetMapping
    public String Default(@SessionAttribute("email") String email) {
        System.out.println(""+email);
        return "login";
    }
}
vcudknz3

vcudknz31#

您收到“HTTP Status 400 - Bad Request”的原因是您的电子邮件属性将逻辑保存到会话中可能不起作用,这就是会话中没有email属性的原因。
因此,这个注解@SessionAttribute("email")会给您一个Bad Request错误,因为在会话中找不到名为email的属性。
将required属性设置为false,就像这样@SessionAttribute(name = "email", required = false),你的问题就解决了。现在,如果session中有任何名为email的属性,它将被spring提取并注入到方法中,否则,email参数将为null值,spring不会抛出任何Bad Request错误。
请参阅@SessionAttributeofficial documentation以了解更多信息。

mwkjh3gx

mwkjh3gx2#

您收到此错误是因为在会话中找不到名为email的属性。您可以尝试修改控制器类,如下所示:

@Controller
@RequestMapping("login/")
public class LoginController {

  @GetMapping
  public String Default(@SessionAttribute(name="email",required=false) String email) {
      System.out.println(""+email);
      return "login";
  }
}

这将确保即使会话不包含'email'属性,它也不会导致应用程序失败,因为spring将默认设置null值。并且您可以在方法中显式添加null检查来处理这种情况。

相关问题