Repository: incubator-juneau Updated Branches: refs/heads/master 0a00ed8a0 -> cf8c4f944
Improved method example resource. Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/cf8c4f94 Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/cf8c4f94 Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/cf8c4f94 Branch: refs/heads/master Commit: cf8c4f944b3abc7ce70c16389c1596b6d2527bbe Parents: 0a00ed8 Author: JamesBognar <[email protected]> Authored: Sun Jun 11 13:39:07 2017 -0400 Committer: JamesBognar <[email protected]> Committed: Sun Jun 11 13:39:07 2017 -0400 ---------------------------------------------------------------------- .../examples/rest/MethodExampleResource.java | 90 ++++++++++++++------ 1 file changed, 62 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/cf8c4f94/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java ---------------------------------------------------------------------- diff --git a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java index 3c8c789..8c4bd8c 100644 --- a/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java +++ b/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java @@ -19,6 +19,8 @@ import org.apache.juneau.microservice.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; import org.apache.juneau.rest.annotation.Method; +import org.apache.juneau.rest.labels.*; +import org.apache.juneau.utils.*; /** * Sample REST resource that shows how to define REST methods. @@ -31,17 +33,24 @@ import org.apache.juneau.rest.annotation.Method; aside="" + "<div style='max-width:400px' class='text'>" + " <p>Shows the different methods for retrieving HTTP query/form-data parameters, headers, and path variables.</p>" - + " <p>The top-level path simply redirects to the first example method and spits out the results as a string.</p>" + + " <p>Each method is functionally equivalent but demonstrate different ways to accomplish the same tasks.</p>" + "</div>" ) ) public class MethodExampleResource extends Resource { private static final long serialVersionUID = 1L; + + private static final UUID SAMPLE_UUID = UUID.fromString("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"); + private static final String SAMPLE_UUID_STRING = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"; /** Example GET request that redirects to our example method */ @RestMethod(name="GET", path="/") - public Redirect doExample() throws Exception { - return new Redirect("example1/xxx/123/{0}/xRemainder?q1=123&q2=yyy", UUID.randomUUID()); + public ResourceDescription[] doExample() throws Exception { + return new ResourceDescription[] { + new ResourceDescription("example1/foo/123/"+SAMPLE_UUID+"/path-remainder?q1=456&q2=bar", "Example 1 - Annotated method attributes."), + new ResourceDescription("example2/foo/123/"+SAMPLE_UUID+"/path-remainder?q1=456&q2=bar", "Example 2 - Low-level RestRequest/RestResponse objects."), + new ResourceDescription("example3/foo/123/"+SAMPLE_UUID+"/path-remainder?q1=456&q2=bar", "Example 3 - Intermediate-level APIs.") + }; } /** @@ -49,25 +58,33 @@ public class MethodExampleResource extends Resource { * This approach uses annotated parameters for retrieving input. */ @RestMethod(name="GET", path="/example1/{p1}/{p2}/{p3}/*") - public String example1( + public Map<String,Object> example1( @Method String method, // HTTP method. @Path String p1, // Path variables. @Path int p2, @Path UUID p3, @Query("q1") int q1, // Query parameters. @Query("q2") String q2, - @Query("q3") UUID q3, + @Query(name="q3",def=SAMPLE_UUID_STRING) UUID q3, @PathRemainder String remainder, // Path remainder after pattern match. @Header("Accept-Language") String lang, // Headers. @Header("Accept") String accept, - @Header("DNT") Integer doNotTrack + @Header(name="DNT",def="1") Integer doNotTrack ) { - // Send back a simple String response - String output = String.format( - "method=%s, p1=%s, p2=%d, p3=%s, remainder=%s, q1=%d, q2=%s, q3=%s, lang=%s, accept=%s, dnt=%d", - method, p1, p2, p3, remainder, q1, q2, q3, lang, accept, doNotTrack); - return output; + // Send back a simple Map response + return new AMap<String,Object>() + .append("method", method) + .append("path-p1", p1) + .append("path-p2", p2) + .append("path-p3", p3) + .append("remainder", remainder) + .append("query-q1", q1) + .append("query-q2", q2) + .append("query-q3", q3) + .append("header-lang", lang) + .append("header-accept", accept) + .append("header-doNotTrack", doNotTrack); } /** @@ -93,7 +110,7 @@ public class MethodExampleResource extends Resource { RequestQuery query = req.getQuery(); int q1 = query.get("q1", 0, int.class); String q2 = query.get("q2", String.class); - UUID q3 = query.get("q3", UUID.class); + UUID q3 = query.get("q3", SAMPLE_UUID, UUID.class); // Path remainder after pattern match. String remainder = req.getPathMatch().getRemainder(); @@ -101,13 +118,22 @@ public class MethodExampleResource extends Resource { // Headers. String lang = req.getHeader("Accept-Language"); String accept = req.getHeader("Accept"); - int doNotTrack = req.getHeaders().get("DNT", int.class); - - // Send back a simple String response - String output = String.format( - "method=%s, p1=%s, p2=%d, p3=%s, remainder=%s, q1=%d, q2=%s, q3=%s, lang=%s, accept=%s, dnt=%d", - method, p1, p2, p3, remainder, q1, q2, q3, lang, accept, doNotTrack); - res.setOutput(output); + int doNotTrack = req.getHeaders().get("DNT", 1, int.class); + + // Send back a simple Map response + Map<String,Object> m = new AMap<String,Object>() + .append("method", method) + .append("path-p1", p1) + .append("path-p2", p2) + .append("path-p3", p3) + .append("remainder", remainder) + .append("query-q1", q1) + .append("query-q2", q2) + .append("query-q3", q3) + .append("header-lang", lang) + .append("header-accept", accept) + .append("header-doNotTrack", doNotTrack); + res.setOutput(m); } /** @@ -116,7 +142,7 @@ public class MethodExampleResource extends Resource { * The framework recognizes the parameter types and knows how to resolve them. */ @RestMethod(name="GET", path="/example3/{p1}/{p2}/{p3}/*") - public String example3( + public Map<String,Object> example3( HttpMethod method, // HTTP method. RequestPathMatch path, // Path variables. RequestQuery query, // Query parameters. @@ -133,18 +159,26 @@ public class MethodExampleResource extends Resource { // Query parameters. int q1 = query.get("q1", 0, int.class); String q2 = query.get("q2", String.class); - UUID q3 = query.get("q3", UUID.class); + UUID q3 = query.get("q3", SAMPLE_UUID, UUID.class); // Path remainder after pattern match. String remainder = path.getRemainder(); // Headers. - int doNotTrack = headers.get("DNT", int.class); - - // Send back a simple String response - String output = String.format( - "method=%s, p1=%s, p2=%d, p3=%s, remainder=%s, q1=%d, q2=%s, q3=%s, lang=%s, accept=%s, dnt=%d", - method, p1, p2, p3, remainder, q1, q2, q3, lang, accept, doNotTrack); - return output; + int doNotTrack = headers.get("DNT", 1, int.class); + + // Send back a simple Map response + return new AMap<String,Object>() + .append("method", method) + .append("path-p1", p1) + .append("path-p2", p2) + .append("path-p3", p3) + .append("remainder", remainder) + .append("query-q1", q1) + .append("query-q2", q2) + .append("query-q3", q3) + .append("header-lang", lang) + .append("header-accept", accept) + .append("header-doNotTrack", doNotTrack); } }
