JAX-RS JAVA EE
import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.QueryParam;import javax.ws.rs.core.Context;import javax.ws.rs.core.UriInfo;import java.net.URI;@Path("/")public class MyResource { @Context UriInfo uriInfo; @PathParam("num") int pathNum; @QueryParam("q") String qValue; @GET @Path("/test{num:[1-9]{0,1}}") public String handleRequest() { URI uri = uriInfo.getRequestUri(); return String.format(" response from: %s%n PathNum: %s%n query paramMyResource: %s%n", uri, pathNum, qValue); }}
import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.QueryParam;import javax.ws.rs.core.Context;import javax.ws.rs.core.UriInfo;import java.net.URI;@Path("/property/")public class MyResource1 { UriInfo uriInfo; int pathNum; String myParam; @GET @Path("/test{num:[1-9]{0,1}}") public String handleRequest() { URI uri = uriInfo.getRequestUri(); return String.format("response from: %s%nPathNum: %s%nmyParam: %s%n", uri, pathNum, myParam); } @Context public void setUriInfo(UriInfo uriInfo) { this.uriInfo = uriInfo; } @PathParam("num") public void setPathNum(int pathNum) { this.pathNum = pathNum; } @QueryParam("q") public void setMyParam(String myParam) { this.myParam = myParam; }}
@Provider@Loggedpublic class LogFilter implements ContainerRequestFilter, ContainerResponseFilter { @Override public void filter(ContainerRequestContext reqContext) throws IOException { System.out.println("-- req info --"); UriInfo uriInfo = reqContext.getUriInfo(); log(uriInfo, reqContext.getHeaders()); } @Override public void filter(ContainerRequestContext reqContext, ContainerResponseContext resContext) throws IOException { System.out.println("-- res info --"); UriInfo uriInfo = reqContext.getUriInfo(); log(uriInfo, resContext.getHeaders()); } private void log(UriInfo uriInfo, MultivaluedMap<String, ?> headers) { System.out.println("Path: " + uriInfo.getPath()); headers.entrySet().forEach(h -> System.out.println(h.getKey() + ": " + h.getValue())); }}
import javax.ws.rs.NameBinding;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@NameBinding@Target({ElementType.TYPE, ElementType.METHOD})@Retention(value = RetentionPolicy.RUNTIME)public @interface Logged {}
@Priority(1)@Providerpublic class InvalidRequestFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext reqContext) throws IOException { Response responseForInvalidRequest = validateRequest(reqContext); if (responseForInvalidRequest != null) { reqContext.abortWith(responseForInvalidRequest); } } private Response validateRequest(ContainerRequestContext reqContext) { UriInfo uriInfo = reqContext.getUriInfo(); String path = uriInfo.getPath(); if (path.equals("orders/history")) { String msg = String.format("The feature is not yet supported: %s%n", path); CacheControl cc = new CacheControl(); cc.setNoStore(true); Response response = Response.status(Response.Status.NOT_IMPLEMENTED) .cacheControl(cc) .entity(msg) .build(); return response; } return null; }}
@Priority(2)@Providerpublic class LogFilter implements ContainerRequestFilter, ContainerResponseFilter { @Override public void filter(ContainerRequestContext reqContext) throws IOException { System.out.println("-- request info --"); UriInfo uriInfo = reqContext.getUriInfo(); log(uriInfo, reqContext.getHeaders()); } @Override public void filter(ContainerRequestContext reqContext, ContainerResponseContext resContext) throws IOException { System.out.println("-- response info --"); UriInfo uriInfo = reqContext.getUriInfo(); log(uriInfo, resContext.getHeaders()); } private void log(UriInfo uriInfo, MultivaluedMap<String, ?> headers) { System.out.println("Path: " + uriInfo.getPath()); System.out.println("HEADERS:"); headers.entrySet().forEach(h -> System.out.println(h.getKey() + ": " + h.getValue())); }}
import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.core.Context;import javax.ws.rs.core.UriInfo;import java.net.URI;@Path("/users")public class UserResource { @Context UriInfo uriInfo; public UserResource() { printUriInfo("In constructor"); } @GET public String getUsers() { printUriInfo("In getUsers() method"); return "returning dummy user list"; } @GET @Path("{id}") public String getUserById(@PathParam("id") String id) { printUriInfo("In getUserById() method"); return "returning dummy user by id " + id; } private void printUriInfo(String msg) { System.out.println("---------------"); System.out.println(msg); System.out.println("-- UriInfo --"); if (uriInfo == null) { System.out.println("UriInfo: " + uriInfo); return; } System.out.println("absolutePath: " + uriInfo.getAbsolutePath()); System.out.println("baseUri: " + uriInfo.getBaseUri()); System.out.println("matchedResource: " + uriInfo.getMatchedResources()); System.out.println("matchedUri: " + uriInfo.getMatchedURIs()); System.out.println("path: " + uriInfo.getPath()); System.out.println("pathParameters: " + uriInfo.getPathParameters()); System.out.println("pathSegments: " + uriInfo.getPathSegments()); System.out.println("queryParameters: " + uriInfo.getQueryParameters()); System.out.println("requestUri: " + uriInfo.getRequestUri()); System.out.println("relativize test: " + uriInfo.relativize(URI.create("test"))); System.out.println("resolve test: " + uriInfo.resolve(URI.create("test"))); }}