BhaskerYadav
BhaskerYadav

Reputation: 589

Pass parameters through angularjs 2 to restful services

I am trying to call a webservice which is as follows,

@RequestMapping(value = { "/persons" },method = RequestMethod.GET,headers="Accept=application/json")
public List<Person> getDummyData(@RequestParam(value="search", defaultValue="a") String search,HttpServletRequest req){
    List<Person> listOfMatchedPersons=listOfPersons.stream().filter(person->person.getName().contains(search)).collect(Collectors.toList());

    req.getParameterMap().forEach((k,v)->System.out.println(k+" : "+v));

    return listOfMatchedPersons;
}

I want to call this service with some parameter from my UI, but it always executes this method with default value of search i.e. a. Following is my angularjs 2's service that is consuming this service,

search(term: string) {

    var params = new URLSearchParams();
    params.set('search', term);

    let aopsServices = 'http://localhost:8080/dummy/persons';//?search='+term;
    this.ot = this.http
        .get(aopsServices,params)
        .map(response => response.json())
    ;

    return this.ot;
}

however if i change the url to http://localhost:8080/dummy/persons'?search='+term; it works.

And also what should be the ideal approach to access the restful services if they are secured ?

Upvotes: 1

Views: 5433

Answers (2)

Thierry Templier
Thierry Templier

Reputation: 202266

I see two ways to do that:

  • Leveraging the URLSearchParams class:

    search(term: string) {
      var params = new URLSearchParams();
      params.set('search', term);
    
      let aopsServices = 'http://localhost:8080/dummy/persons';
      this.ot = this.http
                 .get(aopsServices, { search: params })
                 .map(response => response.json());
    
      return this.ot;
    }
    
  • Use of ` (backticks) instead of single quotes '

    search(term: string) {
      let aopsServices = `http://localhost:8080/dummy/persons?search=${term}`;
      this.ot = this.http
                  .get(aopsServices, { search: params })
                  .map(response => response.json());
    
      return this.ot;
    }
    

    The second approach is more concise but doesn't urlencode the parameter.

Upvotes: 2

BhaskerYadav
BhaskerYadav

Reputation: 589

I changed my code to

   var params = new URLSearchParams();
    params.set('search', term);

    let aopsServices = 'http://localhost:8080/dummy/persons';
    this.ot = this.http
        .get(aopsServices,new RequestOptions({search:params}))
        .map(response => response.json());

and it worked. I misread the documentation of get.

Upvotes: 1

Related Questions