public class MyRequestTestFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext requestContext) throws IOException { System.out.println("===my request test filter==="); } }
public class MyResponseTestFilter implements ContainerResponseFilter { @Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { System.out.println("===my response filter test==="); } }
@Path("filter1") @GET public String resource1() { return "success"; }
public RestApplication() { this.packages("cn.wolfcode.jersey"); this.register(MultiPartFeature.class); this.register(MyRequestTestFilter.class).register(MyResponseTestFilter.class); }
@Test public void test() { String responseText = ClientBuilder.newClient() .target("http://localhost:8082/webapi").path("filter/filter1") .request(MediaType.TEXT_PLAIN).get(String.class); System.out.println(responseText); }
===my request test filter=== ===my response filter test===
@Test public void test() { String responseText = ClientBuilder.newClient() .target("http://localhost:8082/webapi").path("filter/filter2") .request(MediaType.TEXT_PLAIN).get(String.class); System.out.println(responseText); }
===my response filter test===
ContainerRequestContext
public final class HttpMethodOverrideFilter implements ContainerRequestFilter { @Override public void filter(final ContainerRequestContext request) { if (!request.getMethod().equalsIgnoreCase("POST")) { return; } final String header = getParamValue(Source.HEADER, request.getHeaders(), "X-HTTP-Method-Override"); final String query = getParamValue(Source.QUERY, request.getUriInfo().getQueryParameters(), "_method"); final String override; if (header == null) { override = query; } else { override = header; if (query != null && !query.equals(header)) { // inconsistent query and header param values throw new BadRequestException(); } } if (override != null) { request.setMethod(override); if (override.equals("GET")) { if (request.getMediaType() != null && MediaType.APPLICATION_FORM_URLENCODED_TYPE.getType().equals(request.getMediaType().getType())) { final UriBuilder ub = request.getUriInfo().getRequestUriBuilder(); final Form f = ((ContainerRequest) request).readEntity(Form.class); for (final Map.Entry<String, List<String>> param : f.asMap().entrySet()) { ub.queryParam(param.getKey(), param.getValue().toArray()); } request.setRequestUri(request.getUriInfo().getBaseUri(), ub.build()); } } } } }
ContainerResponseContext
public class PoweredByResponseFilter implements ContainerResponseFilter { @Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { responseContext.getHeaders().add("X-Powered-By", "wolfcode.cn"); } }
@PreMatching @Priority(Priorities.HEADER_DECORATOR + 50) public final class HttpMethodOverrideFilter implements ContainerRequestFilter {
public class CheckRequestFilter implements ClientRequestFilter { @Override public void filter(ClientRequestContext requestContext) throws IOException { if (requestContext.getHeaders( ).get("Client-Name") == null) { requestContext.abortWith( Response.status(Response.Status.BAD_REQUEST) .entity("Client-Name header must be defined.") .build()); } } }
@Test public void testClientFilter() { String responseText = ClientBuilder.newClient() .register(CheckRequestFilter.class) .target("http://localhost:8082/webapi").path("filter/filter1") .request(MediaType.TEXT_PLAIN) .header("Client-Name", "wolfcode.cn").get(String.class); System.out.println(responseText); }
@Test public void testClientFilter() { String responseText = ClientBuilder.newClient() .register(CheckRequestFilter.class) .target("http://localhost:8082/webapi").path("filter/filter1") .request(MediaType.TEXT_PLAIN) .get(String.class); System.out.println(responseText); }

