带主体的Angular HttpClient Get方法

时间:2019-01-12 21:45:03

标签: angular angular-httpclient

我正在改进现有的API,并且要求提供一种可以接受多个搜索条件并根据这些条件执行查询的单一get方法。

我正在使用Spring MVC。 get方法签名:

@GetMapping("/subscribers")
public ResponseEntity<List<SubscriberDTO>> getAllSubscribers(Pageable pageable, @RequestBody List<SearchCriteria> lstSearchCriteria)

该实现按预期在邮递员上进行了测试

现在我要去Angular实现前端,但是我找不到通过HttpClient Get方法发送正文的方法...

我有点卡住。我应该在标题上发送搜索条件吗?还是有更好的方法呢?

4 个答案:

答案 0 :(得分:1)

据我所知,您无法使用HttpClient获取发送正文。您至少可以使用该查询以使其成为惯用语。 (或者您可以尝试强制 假设您有一个符合条件的数组:

const criteria = [ {a: 25}, {b: 23} ];
http.get(url + '/?criteria='+ encodeURIComponent( JSON.stringify(criteria)));

在GET请求中发送正文是违反某些RFC标准的,即使它可行,您也必须召唤一些神秘的恶魔。

答案 1 :(得分:1)

在服务方法中,您可以像下面这样使用方法,该方法采用搜索查询的可选参数。您可以按以下方式通过“观察”发送搜索参数。 getAllSubscribers(     页?,     每页项目?,     userParams?   ):Observable > {     const paginatedResult:PaginatedResultSubscribers []> = new PaginatedResult <       订阅者[]     >();     让params = new HttpParams();     if(page!= null && itemsPerPage!= null){       params = params.append(“ pageNumber”,page);       params = params.append(“ pageSize”,itemsPerPage);     }     如果(userParams!= null){       params = params.append(“ minAge”,userParams.minAge);       params = params.append(“ maxAge”,userParams.maxAge);         }        返回this.http       .get (this.baseUrl +“ / subscribers”,{注意:“ response”,params})       。管(         map(response => {           paginatedResult.result = response.body;           如果(response.headers.get(“ Pagination”)!= null){             paginatedResult.pagination = JSON.parse(               response.headers.get(“分页”)             );           }           返回paginatedResult;         })       );   } 基本思想是使用HttpParams。

答案 2 :(得分:0)

为了使Amir的回答更加通用,我做了以下工作来为传递的项目建立参数。

在我的通用数据服务中,我添加了以下变体:

CommandProcessor::CommandProcessor(TCPSocket* client)
{
    this->client = client;
}

void CommandProcessor::process(char* message)
{

    switch(message[0]) { //Command is first byte of message

        case 0x3: { 

            uint32_t count = 10 ;

            char* message = new char[4];

            message[0] = count & 0xff;
            message[1] = (count >> 8) & 0xff;
            message[2] = (count >> 16) & 0xff;
            message[3] = (count >> 24) & 0xff;

            client->send(message, 4);
        }
    }
}

答案 3 :(得分:-1)

This为我工作:

import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; 

filterBooks(category: string, year: string): Observable<Book[]> {
   let httpHeaders = new HttpHeaders()
                         .set('Accept', 'application/json');
   let httpParams = new HttpParams()
                        .set('category', category)
                    .set('year', year);
   console.log(httpParams.toString());
   console.log(httpHeaders.keys());
   return this.http.get<Book[]>(this.bookUrl, {
                headers: httpHeaders,
                params: httpParams, 
                responseType: 'json'
        });
}