Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

@ModelAttribute always maps Boolean to false

when I try to map Boolean value from url to spring controller, it always map to false.

This is my url

http://localhost:8080/myurl?isFirstTime=true

here is my controller

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

//here isFirstTime is always set to false

}

MyObj is POJO and has several other attributes which are mapping perfectly

public class Myobj{

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

i tried putting @JsonProperty but that also didn't work

@JsonProperty
private boolean isFirstTime

any idea what am I doing wrong here ?

like image 251
user9735824 Avatar asked Dec 06 '25 04:12

user9735824


1 Answers

With @ModelAttribute, the object will be initialized:

  • From the model if already added via Model.
  • From the HTTP session via @SessionAttributes.
  • From a URI path variable passed through a Converter.
  • From the invocation of a default constructor.
  • From the invocation of a "primary constructor" with arguments matching to Servlet request parameters; argument names are determined via JavaBeans

In your case, it might relative to the last statement.

You can try 2 way to solve it: - Provide the constructor with the boolean argument in Myobj.java - Add more method to initialize the @ModelAttribute Myobj firstly

@ModelAttribute
public Myobj initObj(@RequestMapping boolean isFirstTime){
     Myobj obj = new MyObj();
     obj.setIsFirstTime(isFirstTime);
     return obj;
}
like image 139
Huy Nguyen Avatar answered Dec 08 '25 21:12

Huy Nguyen