Close

JAX-RS - @Context Examples

JAX-RS JAVA EE 

import com.logicbig.example.Item;
import com.logicbig.example.DataService;

import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import java.util.List;

@Path("items")
public class ItemRestService {

@Context
private UriInfo uriInfo;

private DataService dataService = DataService.getInstance();

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Item> getItems() {
return dataService.getItemList();
}


@Path("{sku}")
@PUT
@Consumes(MediaType.APPLICATION_JSON)
public Response createItem(Item item,
@PathParam("sku") String sku) {

System.out.println(item);
if (dataService.itemExists(sku)) {
//status code 204
System.out.println("no content");
return Response.noContent()
.build();
} else {
dataService.createItem(item, sku);
//status code 201
//sends back new URI in header key = 'LOCATION'
System.out.println("good");
return Response.created(uriInfo.getAbsolutePath())
.build();
}
}

@GET
@Path("{sku}")
@Produces(MediaType.APPLICATION_JSON)
public Response getCustomer(@PathParam("sku") String sku) {
Item item = dataService.getItemBySku(sku);
if (item == null) {
return Response.status(Response.Status.NOT_FOUND)
.build();
} else {
return Response.ok()
.entity(item)
.build();
}
}
}
Original Post




    @GET
@Path("test11")
public String clientTest(@Context HttpHeaders headers) {
MultivaluedMap<String, String> rh = headers.getRequestHeaders();
String str = rh.entrySet()
.stream()
.map(e -> e.getKey() + " = " + e.getValue())
.collect(Collectors.joining("\n"));

return str;
}
Original Post








    @GET
@Path("{path}")
public String create(@PathParam("path") String path,
@Context Providers providers) {
ContextResolver<MyContext> cr = providers
.getContextResolver(MyContext.class, MediaType.WILDCARD_TYPE);
MyContext<String> c = cr.getContext(String.class);
String r = c.get(path);
return "response: " + r;
}
Original Post
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")));
}
}
Original Post




import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MultivaluedMap;
import java.util.List;
import java.util.Map;

@Path("/users")
public class UserResource {
@Context
private HttpHeaders httpHeaders;

@GET
public String getUsers() {
System.out.println("In getUsers() method");
printHeaderInfo();
return "returning dummy user list";
}

private void printHeaderInfo() {
System.out.println("---------------");
MultivaluedMap<String, String> requestHeaders = httpHeaders.getRequestHeaders();
for (Map.Entry<String, List<String>> entry : requestHeaders.entrySet()) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
}
}
Original Post




package com.logicbig.example;

import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.container.ResourceContext;
import javax.ws.rs.core.Context;

@Path("/")
public class OrderResource {

@Context
private ResourceContext resourceContext;

@Path("/orders/{id}")
public OrderDetails getOrderById(@PathParam("id") int orderId) {
return resourceContext.initResource(new OrderDetails(orderId));
}
}
Original Post
package com.logicbig.example;

import javax.ws.rs.GET;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;

public class OrderDetails {

private final int id;
@Context
private HttpHeaders headers;

public OrderDetails(int id) {
System.out.println("--- init --");
this.id = id;
}

@GET
public String getOrderDetails() {
return String.format("response from getOrderDetails(), headers: %s%n",
headers.getRequestHeaders());
}
}
Original Post




package com.logicbig.example;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Configuration;
import javax.ws.rs.core.Context;
import java.util.Map;

@Path("/")
public class ExampleResource {
@Context
private Configuration configuration;

@GET
@Path("/test1")
public String getResponse() {
Map<String, Object> properties = configuration.getProperties();
properties.forEach((k, v) -> System.out.println(k + " = " + v));
return "test response";
}
}
Original Post




@Provider
@Produces("text/csv")
public class CsvWriter<T> implements MessageBodyWriter<List<T>> {
@Context
Providers providers;

@Override
public void writeTo(List<T> ts, Class<?> type, Type genericType, Annotation[] annotations,
MediaType mediaType, MultivaluedMap<String, Object> httpHeaders,
OutputStream entityStream) throws IOException, WebApplicationException {
String response = "";
for (T t : ts) {
try {
Class<?> c = t.getClass();
//using Java Bean API to access property values
BeanInfo beanInfo = Introspector.getBeanInfo(c);
String temp = "";
for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {
if (pd.getName().equals("class")) {//skip getClass()
continue;
}
Object o = pd.getReadMethod().invoke(t);
temp += "," + o;
}
if (temp.length() > 0) {
temp = temp.substring(1);
response += temp + "\n";
}
} catch (Exception e) {
throw new WebApplicationException(e);
}
}
//using Providers instance
MessageBodyWriter<String> plainTextWriter = providers.getMessageBodyWriter(String.class,
genericType, annotations, MediaType.TEXT_PLAIN_TYPE);
plainTextWriter.writeTo(response, String.class, genericType, annotations, mediaType,
httpHeaders, entityStream);
}

@Override
public boolean isWriteable(Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {
return true;
}

@Override
public long getSize(List<T> ts, Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {
return -1;
}
}
Original Post
package com.logicbig.example;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;

@Path("/")
public class ExampleResource {
@Context
private ServletConfig servletConfig;
@Context
private ServletContext servletContext;
@Context
private HttpServletRequest httpServletRequest;
@Context
private HttpServletResponse httpServletResponse;

@GET
@Path("/test")
public void handleRequest() throws IOException {
System.out.println("-- in resource method --");
printServletConfigInfo();
printServletContextInfo();
printServletRequestInfo();
//committing response using HttpServletResponse
httpServletResponse.getWriter().write("Test response");
httpServletResponse.getWriter().flush();
}

private void printServletRequestInfo() {
System.out.println("-- Servlet Request --");
System.out.println("Request URI: " + httpServletRequest.getRequestURI());
Enumeration<String> headerNames = httpServletRequest.getHeaderNames();
ArrayList<String> list = Collections.list(headerNames);
System.out.println("Request headers: " + list.size());
list.forEach(h -> System.out.println(h + " = " + httpServletRequest.getHeader(h)));
}

private void printServletContextInfo() {
System.out.println("-- Servlet Context --");
System.out.println("Context path: " + servletContext.getContextPath());
System.out.println("Server info: " + servletContext.getServerInfo());
Enumeration<String> attributeNames = servletContext.getAttributeNames();
ArrayList<String> list = Collections.list(attributeNames);
System.out.println("Context attributes: " + list.size());
System.out.println("Session Tracking modes: " + servletContext.getDefaultSessionTrackingModes());
}

private void printServletConfigInfo() {
System.out.println("-- Servlet Config Params --");
Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
ArrayList<String> list = Collections.list(initParameterNames);
System.out.println("Init params: " + list.size());
list.forEach(n -> System.out.println(n + " = " + servletConfig.getInitParameter(n)));
System.out.println("Servlet name: " + servletConfig.getServletName());
}
}
Original Post




See Also