For this tutorial, I will be using the workspace created in my tutorial RESTful Web Service with Spring 3.1. So I suggest you to read RESTful Web Service with Spring 3.1, before start reading this tutorial. In JAX-RS, you can use @Path to bind URI pattern to a Java method and in this tutorial I will demonstrate how to use this using Spring 3.1.0. In this example, I will show you how to write normal URI mapping, URI mapping with parameter and also show you the use of regular expression to validate the inputs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | package com.techiekernel.service; import java.util.Iterator; import org.springframework.stereotype.Controller; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.techiekernel.model.FooBar; import com.techiekernel.model.FooBarSet; /** * This exmaple has been created to demonstrate the @path for JAX-RS * * @author satish * */ @Controller @RequestMapping("/foobaresample1") public class FooBarServiceExample1 { static FooBarSet fooBarSet; static { fooBarSet = new FooBarSet(); FooBar foobar = null; for (int i = 0; i < 10; i++) { foobar = new FooBar(i, "TechieKernel" + i); fooBarSet.add(foobar); } } /** * Normal URI Mapping with parameter * @param foobarId * @return */ @RequestMapping(value = "/{foobarId}", method = RequestMethod.GET, headers = "Accept=application/xml, application/json", produces = { "application/json", "application/xml" }) @ResponseBody public FooBar getFoobar(@PathVariable int foobarId) { for (FooBar foobar : fooBarSet) { if (foobar.getId() == foobarId) return foobar; } return null; } /** * Normal URI Mapping * @return */ @RequestMapping(method = RequestMethod.GET, headers = "Accept=application/xml, application/json", produces = { "application/json", "application/xml" }) @ResponseBody public FooBarSet getFoobars() { return fooBarSet; } /** * URI mapping and regular expression * @param foobarId * @return */ @RequestMapping("/id/{foobarId:\\d+}") @ResponseBody public FooBar getFoobarById(@PathVariable int foobarId) { for (FooBar foobar : fooBarSet) { if (foobar.getId() == foobarId) return foobar; } return null; } /** * URI mapping and regular expression * @param foobarName * @return */ @RequestMapping("/name/{foobarName:[a-zA-Z_0-9]+}") @ResponseBody public FooBar getFoobarByName(@PathVariable String foobarName) { for (FooBar foobar : fooBarSet) { if (foobar.getName().equalsIgnoreCase(foobarName)) return foobar; } return null; } } |
Now it is time to test the web service for different inputs..
1 2 3 4 5 6 7 | curl -i "http://springmvc-rest.cloudfoundry.com/foobaresample1/" -X GET curl -i "http://springmvc-rest.cloudfoundry.com/foobaresample1/1" -X GET curl -i "http://springmvc-rest.cloudfoundry.com/foobaresample1/id/1" -X GET curl -i "http://springmvc-rest.cloudfoundry.com/foobaresample1/name/techiekernel1" -X GET |
If the inputs will be failed as per the regular expression, you will get a HTTP 404 response. I have deployed the application in cloud space and it is available for you to test. You can use the above URL to test from your side..
Source Code:
You can pull the source code from GitHub.
0 comments:
Post a Comment