<dependencies>
<dependency>
<groupId>com.twitter</groupId>
<artifactId>finagle-core_2.13</artifactId>
<version>21.6.0</version>
</dependency>
</dependencies>
import com.twitter.finagle.Service;
import com.twitter.finagle.http.Method;
import com.twitter.finagle.http.Request;
import com.twitter.finagle.http.Response;
import com.twitter.finagle.http.Status;
import com.twitter.finagle.http.path.Root;
import com.twitter.util.Future;
import com.twitter.util.FutureTransformer;
public class SearchService extends Service<Request, Response> {
private final DataService dataService;
public SearchService(DataService dataService) {
this.dataService = dataService;
}
@Override
public Future<Response> apply(Request request) {
if (request.method().equals(Method.Get()) && request.path().equals(Root$.MODULE$)) {
String query = request.getParam("query");
Future<Response> response = dataService.search(query).flatMap(result -> {
Response httpResponse = Response.apply(Status.Ok());
httpResponse.setContentString(result);
return Future.value(httpResponse);
});
return response;
} else {
return Future.value(Response.apply(Status.NotFound()));
}
}
public static void main(String[] args) {
DataService dataService = new DataService();
SearchService searchService = new SearchService(dataService);
com.twitter.finagle.Http.serve(":8080", searchService);
}
}
import com.twitter.finagle.Service;
import com.twitter.finagle.http.Method;
import com.twitter.finagle.http.Request;
import com.twitter.finagle.http.Response;
import com.twitter.finagle.http.Status;
import com.twitter.util.Future;
import com.twitter.util.FutureTransformer;
public class DataService {
public Future<String> search(String query) {
return Future.value("Search Results for: " + query);
}
}