2

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 ?

Nicholas K
  • 14,695
  • 7
  • 31
  • 56
user9735824
  • 1,068
  • 4
  • 13
  • 32

2 Answers2

1

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;
}
Huy Nguyen
  • 1,830
  • 1
  • 11
  • 11
0

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

}

Mohammad Anas
  • 300
  • 3
  • 6