Spring @ModelAttribute始终将布尔值映射为false

Spring @ModelAttribute始终将布尔值映射为false,spring,spring-mvc,spring-boot,modelattribute,Spring,Spring Mvc,Spring Boot,Modelattribute,当我尝试将布尔值从url映射到spring控制器时,它总是映射到false 这是我的网址 http://localhost:8080/myurl?isFirstTime=true 这是我的控制器 @RequestMapping(value = "/myurl", method = RequestMethod.GET) public ResponseEntity<?> getMyUrl(@Valid @ModelAttribute MyObject ap,Bind

当我尝试将布尔值从url映射到spring控制器时,它总是映射到false

这是我的网址

http://localhost:8080/myurl?isFirstTime=true
这是我的控制器

 @RequestMapping(value = "/myurl", method = RequestMethod.GET)
        public ResponseEntity<?>  getMyUrl(@Valid @ModelAttribute MyObject ap,BindingResult bindingResult ) {

//here isFirstTime is always set to false

}
我试着放
@JsonProperty
,但也没用

@JsonProperty
private boolean isFirstTime

知道我做错了什么吗?

使用@modeldattribute,对象将被初始化:

  • 如果已通过模型添加,则从模型中删除
  • 通过@SessionAttributes从HTTP会话
  • 来自通过转换器传递的URI路径变量
  • 从默认构造函数的调用
  • 通过调用参数与Servlet请求参数匹配的“主构造函数”;参数名是通过JavaBeans确定的
在您的情况下,它可能是相对于上一条语句的

您可以尝试两种解决方法: -在Myobj.java中为构造函数提供布尔参数 -添加更多方法以首先初始化@modeldattribute Myobj

@ModelAttribute
public Myobj initObj(@RequestMapping boolean isFirstTime){
     Myobj obj = new MyObj();
     obj.setIsFirstTime(isFirstTime);
     return obj;
}

最简单的方法可能是

@RequestMapping(value = "/myurl", method = RequestMethod.GET)
    public ResponseEntity<?>  getMyUrl(@Valid @ModelAttribute MyObject ap,@RequestParam boolean isFirstTime, BindingResult bindingResult ) {
@RequestMapping(value=“/myurl”,method=RequestMethod.GET)
公共响应属性getMyUrl(@Valid@ModelAttribute MyObject ap,@RequestParam boolean isFirstTime,BindingResult){
//这里是FirstTime总是根据传入的请求参数初始化 //您可以将其设置为ap.isFirstTime(isFirstTime);//或任何setter方法


}

您应该使用
POST
请求,而不是
GET
,或者使用
@RequestParam boolean isFirstTime
,所以您是说使用getsee这是不可能的,我从您提供的链接中没有任何线索。
@RequestMapping(value = "/myurl", method = RequestMethod.GET)
    public ResponseEntity<?>  getMyUrl(@Valid @ModelAttribute MyObject ap,@RequestParam boolean isFirstTime, BindingResult bindingResult ) {