REST WebService的多资源路径
package com.easyway.jersey.rest;import java.util.HashSet;import java.util.Set;import javax.ws.rs.core.Application;import javax.ws.rs.ApplicationPath;/** *注册所有的服务 * 1.继承自 javax.ws.rs.core.Application * 2.使用 ApplicationPath注解类 * @author longgangbai * * * */@ApplicationPath("resources")public class CustomerApplication extends Application {/** * 注册各种资源 */ @Override public Set<Class<?>> getClasses() { final Set<Class<?>> classes = new HashSet<Class<?>>(); // register root resources/providers classes.add(MasterResourceService.class); classes.add(TextPlainService.class); classes.add(SimpleTextPlainService.class); classes.add(MultiplePathService.class); classes.add(MultipleService.class); return classes; }}?
?
package com.easyway.jersey.rest;import java.io.InputStream;import javax.servlet.ServletContext;import javax.ws.rs.GET;import javax.ws.rs.Produces;import javax.ws.rs.Path;import javax.ws.rs.core.Context;/** * 创建一个主的REST服务的 * @author longgangbai * */@Path("/start")public class MasterResourceService { /** * 获取Web容器相关的信息 */ @Context ServletContext sc; /** * 设置将获取的资源转换为流信息在页面index.html显示 * @return */ @GET @Produces("text/html") public InputStream doGet() { return sc.getResourceAsStream("/index.html"); } }?
?
?
package com.easyway.jersey.rest;import com.sun.jersey.api.representation.Form;import java.net.URL;import javax.activation.DataSource;import javax.activation.FileDataSource;import javax.ws.rs.GET;import javax.ws.rs.POST;import javax.ws.rs.Produces;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.core.Context;import javax.ws.rs.core.MultivaluedMap;import javax.ws.rs.core.Response;import javax.ws.rs.core.UriInfo;import javax.ws.rs.core.MediaType;/** * 这个类比较特殊采用多层次的匹配格式调用不同的方法 * * @author longgangbai * */@Path("/multiplePathService/{arg1}/{arg2}")public class MultiplePathService { //获取请求的各种参数@Context UriInfo uriInfo; int count =0; /** * * 在post方式下返回的结果 */ @POST public void doPost() { System.out.println("MultiplePathService POST"); } /** * 这个方法并不具有具体的方法实现,只提供判断服务的去向,调用的方法 * * @return */ @GET public Response doGet() { MultivaluedMap<String, String> params = uriInfo.getPathParameters(); String arg1 = params.getFirst("arg1"); String arg2 = params.getFirst("arg2"); //输出相关的查询参数 for (String key : uriInfo.getQueryParameters().keySet()) System.out.println("key: " + key + " value: " + uriInfo.getQueryParameters().getFirst(key)); //获取查询参数 int rep = Integer.parseInt(uriInfo.getQueryParameters().getFirst("rep")); String help = "<pre>Received args: arg1: "+arg1+" arg2: "+arg2+"\n" +"Please specify a \"rep\" queryParameter using one of the following values\n" +"For example, http://localhost:8080/AdvanceJersey/resources/multiplePathService/2/4?rep=0 \n" +"Valid Representations:\n" +"\t0 - StringRepresentation of this message\n" +"\t1 - StringRepresentation\n" +"\t2 - FormURLEncodedRepresentation\n" +"\t3 - DataSourceRepresentation\n</pre>"; Response r = null; System.out.println("rep: "+rep); switch (rep) { case 0: //请求帮助 r = Response.ok(help, MediaType.TEXT_PLAIN). header("resource3-header", MediaType.TEXT_PLAIN).build(); break; case 1: // r = Response.ok(getStringRep(arg1, arg2),MediaType.TEXT_PLAIN). header("resource3-header",MediaType.TEXT_PLAIN).build(); break; case 2: r = Response.ok(getFormURLEncodedRep(arg1, arg2), "application/x-www-form-urlencoded"). header("resource3-header", "application/x-www-form-urlencoded").build(); break; case 3: r = Response.ok(getImageRep(), "image/jpg"). header("resource3-header", "image/jpg").build(); break; default : r = Response.ok(help, MediaType.TEXT_PLAIN).build(); break; } return r; } /** * 此方法的请求的路径为: * http://localhost:8080/AdvanceJersey/resources/multiplePathService/2/4?rep=0 * @param arg1 * @param arg2 * @return */ @Produces(MediaType.TEXT_PLAIN) @GET public String getStringRep(@PathParam("arg1")String arg1, @PathParam("arg2")String arg2) { return "representation: StringRepresentation: arg1: " +arg1+" arg2: "+arg2+"\n\n"; } /** /** * 此方法的请求的路径为: * http://localhost:8080/AdvanceJersey/resources/multiplePathService/2/4?rep=2 * 上传下载使用这种表单类型 * * @param arg1 * @param arg2 * @return */ @Produces(MediaType.APPLICATION_FORM_URLENCODED) @GET public Form getFormURLEncodedRep( @PathParam("arg1")String arg1, @PathParam("arg2")String arg2) { Form urlProps = new Form(); urlProps.add("representation", "FormURLEncodedRepresentation"); urlProps.add("name", "Master Duke"); urlProps.add("sex", "male"); urlProps.add("arg1", arg1); urlProps.add("arg2", arg2); return urlProps; } /** * 此方法的请求的路径为: * http://localhost:8080/AdvanceJersey/resources/multiplePathService/2/4?rep=3 * * * @return */ @Produces("image/jpg") @GET public DataSource getImageRep() { URL jpgURL =this.getClass().getResource("java.jpg"); return new FileDataSource(jpgURL.getFile()); } }?
?
?
package com.easyway.jersey.rest;import javax.ws.rs.Consumes;import javax.ws.rs.GET;import javax.ws.rs.POST;import javax.ws.rs.Path;import javax.ws.rs.Produces;import javax.ws.rs.QueryParam;import javax.ws.rs.core.MediaType;import javax.ws.rs.core.Response;/** * 这个类比较特殊在拥有多个Path解析路径,采用模糊匹配的模式到相应的结果 * * @author longgangbai * */@Path("/multipleService")@Consumes(MediaType.TEXT_PLAIN)public class MultipleService { public MultipleService() { } /** * 访问路径: * http://localhost:8080/AdvanceJersey/resources/multipleService?format=text/html * html格式返回 * @return */ @GET @Produces(MediaType.TEXT_HTML) public String getAsHtml() { return "<html><head></head><body><p>Hello World</p></body></html>"; } /** * 访问路径: * http://localhost:8080/AdvanceJersey/resources/multipleService?format=text/xml * xml格式返回 * @return */ @GET @Produces(MediaType.TEXT_XML) public String getAsXml() { return "<response>Hello World</response>"; } /** * 访问路径: * http://localhost:8080/AdvanceJersey/resources/multipleService?format=text/plain * 文件形式返回 * @return */ @GET @Produces(MediaType.TEXT_PLAIN) public String getAsText() { return "Hello World"; } /** * 针对GET方式发送请求中 * http://localhost:8080/AdvanceJersey/resources/multipleService?format=mediaType * * 根据format对应的mediaType的值,调用相关的类型 * * 参数判断输出的格式的类型的,并返回相应的结果 */ @GET @Produces(MediaType.WILDCARD) public Response get(@QueryParam("format") String format) { //调用相应的相应类型 return Response.ok("Hello World", format).build(); } /** * Post请求的处理 * http://localhost:8080/AdvanceJersey/resources/multipleService * * 文本格式相应 * @param input * @return */ @POST @Produces(MediaType.TEXT_PLAIN) public String postText(String input) { return input; } }?
?
?
package com.easyway.jersey.rest;import javax.ws.rs.GET;import javax.ws.rs.Produces;import javax.ws.rs.Path;import javax.ws.rs.core.MediaType;/** * * @author longgangbai * * 访问路径如下: * http://localhost:8080/AdvanceJersey/resources/simpleTextPlainService * 备注:AdvanceJersey 为应用上下文 * resources为主资源服务CustomerApplication路径 * simpleTextPlainService:本服务的路径 * */@Path("/simpleTextPlainService")public class SimpleTextPlainService { @GET @Produces(MediaType.TEXT_PLAIN) public String describe() { // public static final String MEDIA_TYPE_WILDCARD = "*"; // public static final String WILDCARD = "*/*"; // public static final MediaType WILDCARD_TYPE = new MediaType(); // public static final String APPLICATION_XML = "application/xml"; // public static final MediaType APPLICATION_XML_TYPE = new MediaType("application", "xml"); // public static final String APPLICATION_ATOM_XML = "application/atom+xml"; // public static final MediaType APPLICATION_ATOM_XML_TYPE = new MediaType("application", "atom+xml"); // public static final String APPLICATION_XHTML_XML = "application/xhtml+xml"; // public static final MediaType APPLICATION_XHTML_XML_TYPE = new MediaType("application", "xhtml+xml"); // public static final String APPLICATION_SVG_XML = "application/svg+xml"; // public static final MediaType APPLICATION_SVG_XML_TYPE = new MediaType("application", "svg+xml"); // public static final String APPLICATION_JSON = "application/json"; // public static final MediaType APPLICATION_JSON_TYPE = new MediaType("application", "json"); // public static final String APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded"; // public static final MediaType APPLICATION_FORM_URLENCODED_TYPE = new MediaType("application", "x-www-form-urlencoded"); // public static final String MULTIPART_FORM_DATA = "multipart/form-data"; // public static final MediaType MULTIPART_FORM_DATA_TYPE = new MediaType("multipart", "form-data"); // public static final String APPLICATION_OCTET_STREAM = "application/octet-stream"; // public static final MediaType APPLICATION_OCTET_STREAM_TYPE = new MediaType("application", "octet-stream"); // public static final String TEXT_PLAIN = "text/plain"; // public static final MediaType TEXT_PLAIN_TYPE = new MediaType("text", "plain"); // public static final String TEXT_XML = "text/xml"; // public static final MediaType TEXT_XML_TYPE = new MediaType("text", "xml"); // public static final String TEXT_HTML = "text/html"; // public static final MediaType TEXT_HTML_TYPE = new MediaType("text", "html"); return "Hello World from SimpleTextPlainService resource "; } }?
?
?
package com.easyway.jersey.rest;import javax.servlet.ServletConfig;import javax.servlet.http.HttpServletRequest;import javax.ws.rs.GET;import javax.ws.rs.core.MediaType;import javax.ws.rs.Produces;import javax.ws.rs.Path;import javax.ws.rs.core.Context;/** * 获取Servlet Context信息 * @author longgangbai * */@Path("/textPlainService")public class TextPlainService { /** * */ @Context HttpServletRequest servletRequest; @Context ServletConfig servletConfig; /** * 获取Servlet Context的一些信息 * @return */ @GET @Produces(MediaType.TEXT_PLAIN) public String describe() { return "Hello World from TextPlainService resource 1 in servlet: '" + servletConfig.getServletName() + "', path: '" + servletRequest.getServletPath() + "'"; } }?
web.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>RESTAPP</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>com.easyway.jersey.rest.CustomerApplication</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>RESTAPP</servlet-name> <url-pattern>/resources/*</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config></web-app>
?
?
?
附件为源代码:
?
?