通过 angularjs 2 向 restful 服务传递参数

Pass parameters through angularjs 2 to restful services

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

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

但是,如果我将 url 更改为 http://localhost:8080/dummy/persons'?search='+term;,它会起作用。

如果安全,访问 restful 服务的理想方法应该是什么?

我将代码更改为

   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的文档。

我看到有两种方法可以做到这一点:

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

    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。