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

时间:2018-09-19 15:51:14

标签: 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,BindingResult bindingResult ) {

//here isFirstTime is always set to false

}

MyObj是POJO,并且具有其他几个可以完美映射的属性

public class Myobj{

 private boolean isFirstTime
  //there are other members as well
    //getter setter

我尝试放@JsonProperty,但那也没有用

@JsonProperty
private boolean isFirstTime

知道我在做什么错吗?

2 个答案:

答案 0 :(得分:0)

使用@ModelAttribute可以初始化对象:

  • 从模型(如果已通过Model添加)。
  • 通过@SessionAttributes从HTTP会话中获取。
  • 来自通过Converter的URI路径变量。
  • 通过默认构造函数的调用。
  • 通过调用具有与Servlet请求参数匹配的参数的“主要构造函数”;参数名称是通过JavaBeans
  • 确定的

在您的情况下,可能与上一条语句有关。

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

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

答案 1 :(得分:0)

最简单的方法可能是

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

///此处isFirstTime始终根据传入的请求参数进行初始化 //您可以将其设置为ap.isFirstTime(isFirstTime); //或任何您的设置方法是

}