user9735824
user9735824

Reputation: 1256

@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 ?

Upvotes: 3

Views: 1914

Answers (3)

ntv
ntv

Reputation: 1

I stuck at this problem, but I've found that we must use Boolean object instead of boolean primitive type to map boolean value correctly in ModelAttribute

Upvotes: 0

Mohammad Anas
Mohammad Anas

Reputation: 318

The most easiest method could be

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

//here isFirstTime is always initialized from incoming request parameters // you can set it ap.isFirstTime(isFirstTime); // or whatever your setter method is

}

Upvotes: 0

Huy Nguyen
Huy Nguyen

Reputation: 2061

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;
}

Upvotes: 1

Related Questions