spring @ModelAttribute始终将布尔值Map为false

js4nwp54  于 2023-01-12  发布在  Spring
关注(0)|答案(3)|浏览(451)

当我试图将布尔值从urlMap到spring控制器时,它总是Map为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,并且具有其他几个完美Map的属性

public class Myobj{

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

我试着把@JsonProperty,但这也没有工作

@JsonProperty
private boolean isFirstTime

你知道我哪里做错了吗

2ic8powd

2ic8powd1#

使用@ModelAttribute,将初始化对象:

  • 如果已通过模型添加,则从模型中添加。
  • 通过@SessionAttributes从HTTP会话。
  • 从通过转换器传递的URI路径变量。
  • 从默认构造函数的调用。
  • 从具有与Servlet请求参数匹配的自变量的“主构造函数”的调用;参数名称通过JavaBeans确定

在您的情况下,它可能与最后一个语句有关。
您可以尝试2种方法来解决它:- 在www.example.com中为构造函数提供布尔参数Myobj.java-添加更多方法以首先初始化@ModelAttribute Myobj

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

oo7oh9g92#

最简单的方法可能是

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

//此处isFirstTime始终从传入请求参数初始化//您可以将其设置为ap.isFirstTime(isFirstTime);//或者任何setter方法
}

ryevplcw

ryevplcw3#

我在这个问题上遇到了困难,但是我发现我们必须使用Boolean对象而不是Boolean原语类型来正确地将布尔值Map到ModelAttribute中

相关问题