@Override public void filter(ClientRequestContext requestContext) throws IOException { updateOAuthToken(); // add OAuth query param final String requestUri = requestContext.getUri().toString(); final StringBuilder builder = new StringBuilder(requestUri); if (requestUri.contains("?")) { builder.append('&'); } else { builder.append('?'); } builder.append("oauth2_access_token=").append(oAuthToken.getAccessToken()); requestContext.setUri(URI.create(builder.toString())); }
@Override public void filter(final ClientRequestContext clientRequestContext) { requestHeaders.forEach((k, v) -> clientRequestContext.getHeaders().putSingle(k, v)); clientRequestContext.setUri(rebuild(clientRequestContext.getUri())); logger.trace("Request {} {}.", clientRequestContext.getMethod(), clientRequestContext.getUri()); }
@Override public void filter(final ClientRequestContext clientRequestContext) { requestHeaders.forEach((k, v) -> clientRequestContext.getHeaders().putSingle(k, v)); clientRequestContext.setUri(rebuild(clientRequestContext.getUri())); logger.trace("Request {} {}.", clientRequestContext.getMethod(), clientRequestContext.getUri()); }
@Provider @Component // because I'm using spring boot public class GetMessageBodyFilter implements ClientRequestFilter { @Override public void filter(ClientRequestContext requestContext) throws IOException { if (requestContext.getEntity() instanceof Map && requestContext.getMethod().equals(HttpMethod.GET)) { UriBuilder uriBuilder = UriBuilder.fromUri(requestContext.getUri()); Map allParam = (Map)requestContext.getEntity(); for (Object key : allParam.keySet()) { uriBuilder.queryParam(key.toString(), allParam.get(key)); } requestContext.setUri(uriBuilder.build()); requestContext.setEntity(null); } } }
@Test void request() throws URISyntaxException { final MultivaluedMap<String, Object> map = spy(new MultivaluedMapImpl<>()); final ClientRequestContext ctx = mock(ClientRequestContext.class); when(ctx.getHeaders()).thenReturn(map); when(ctx.getUri()).thenReturn(new URI("http://localhost")); final RoboZonkyFilter filter = new RoboZonkyFilter(); filter.setQueryParam("something", "value"); filter.filter(ctx); verify(ctx).setUri(new URI("http://localhost?something=value")); verify(map).putSingle(eq("User-Agent"), eq(Defaults.ROBOZONKY_USER_AGENT)); }
@Override public void filter(ClientRequestContext rc) throws IOException { String method = rc.getMethod(); String expectedMethod = null; if (rc.getAcceptableMediaTypes().contains(MediaType.valueOf("text/mistypedxml")) && rc.getHeaders().getFirst("THEMETHOD") != null) { expectedMethod = MediaType.TEXT_XML_TYPE.equals(rc.getMediaType()) ? "DELETE" : "GET"; rc.setUri(URI.create("http://localhost:" + PORT + "/bookstore/books2")); rc.setMethod(rc.getHeaders().getFirst("THEMETHOD").toString()); if ("GET".equals(expectedMethod)) { rc.getHeaders().putSingle("Content-Type", "text/xml"); } } else { expectedMethod = "POST"; } if (!expectedMethod.equals(method)) { throw new RuntimeException(); } if ("GET".equals(expectedMethod)) { rc.setEntity(new Book("book", 560L)); } else { rc.setEntity(new Book("book", ((Book)rc.getEntity()).getId() + 5)); } }