通过angularjs 2将参数传递给宁静的服务

时间:2016-02-09 03:54:02

标签: web-services angular spring-rest

我正在尝试调用以下网络服务,

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

我想用我的UI中的一些参数调用此服务,但它始终使用搜索的默认值即a执行此方法。 以下是我使用此服务的angularjs 2服务,

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

但是,如果我将网址更改为http://localhost:8080/dummy/persons'?search='+term;则可行。

如果安全服务受到保护,那么访问其他服务的理想方法是什么呢?

2 个答案:

答案 0 :(得分:1)

我将代码更改为

   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());

它有效。 我误读了get的文档。

答案 1 :(得分:1)

我认为有两种方法可以做到:

  • 利用URLSearchParams类:

    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;
    }
    
  • 使用`(反引号)代替单引号'

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

    第二种方法更简洁,但不对参数进行urlencode。