Spring MVC:客户端发送的请求语法错误



我在尝试使用Spring MVC控制器中的@SessionAttribute时遇到了一些问题。我已经保存了会话,但是当我再次向视图显示会话时,它给出了一个错误:

HTTP Status 400—Bad Request:客户端发送的请求是错误的语法错误的。

但当我删除@SessionAttribute时,它正常工作

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

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

您收到" HTTP状态400 -错误请求"的原因是你的电子邮件属性保存逻辑到会话可能不工作,这就是为什么没有email属性存在于会话。

因此,这个注释@SessionAttribute("email")会给您一个Bad Request错误,因为在会话中没有找到名为email的属性。

将所需属性设置为false,如@SessionAttribute(name = "email", required = false),您的问题将得到解决。现在,如果会话中有任何名为email的属性,它将被spring拾取并将被注入到方法中,否则,email参数将为空值,spring将不会抛出任何Bad Request错误。

请参阅@SessionAttribute的官方文档以了解更多信息。

你得到这个错误是因为在会话中没有找到名为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将默认设置为空值。您可以在方法中显式地添加空检查来处理这种情况。