根据响应从自身调用Spring控制器

问题描述 投票:0回答:1

我们有一个要求...当我们收到对控制器的请求时,我们将调用另一个api,并基于另一个api响应,我们必须使用不同的参数将请求重新触发至控制器

@RequestMapping(value = "/search", method = RequestMethod.GET, produces = "application/json")
public Map<String, Account> searchEndpoint(@RequestParam(name = "query", required = true) String query) {

        RequestPayload req = new RequestPayload(query);
        SearchResponse searchResponse = http.executeSecurePost(this.searchUrl, req, SearchResponse.class);

        if(("particularModel").equalsIgnoreCase(searchResponse.getModel()))
        {
              String  differentQueryParameter = searchResponse.getName();
              searchEndpoint(differentQueryParameter);
        } 
        else {
             //do something else
        }
        return json response;

}

当我这样做时...在第二次调用并获得新的响应并返回时工作正常...但是再次触发了第三次查询,这一次是原始查询被触发。 不知道为什么触发第三个查询。 任何帮助将不胜感激。

rest spring-mvc java-ee spring-boot
1个回答
1
投票

一次又一次地调用您的处理程序,这可能会导致递归函数。 您可以避免这种编程。您可以将调用api的逻辑放在service方法中并执行该操作。

@RequestMapping(value = "/search", method = RequestMethod.GET, produces = "application/json")public Map<String, Account> searchEndpoint(@RequestParam(name = "query", required = true) String query) {
  //put this logic in service
  RequestPayload req = new RequestPayload(query);
  SearchResponse searchResponse = http.executeSecurePost(this.searchUrl, req, SearchResponse.class);

    if(("particularModel").equalsIgnoreCase(searchResponse.getModel()))
    {
          String  differentQueryParameter = searchResponse.getName();
          //put this logic in service and just call it
          RequestPayload req = new RequestPayload(query);
          SearchResponse searchResponse = http.executeSecurePost(this.searchUrl, req, SearchResponse.class)
    } 
    else {
         //do something else
    }
    return json response;

}
© www.soinside.com 2019 - 2024. All rights reserved.