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 @PathParam to inject the value of URI parameter that defined in @Path expression, into Java method and in this tutorial I will demonstrate how to use this using Spring 3.1.0.
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 | 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("/foobaresample2") public class FooBarServiceExample2 { 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; } @RequestMapping(value = "/{foobarId}/{name}", method = RequestMethod.GET, headers = "Accept=application/xml, application/json", produces = { "application/json", "application/xml" }) @ResponseBody public FooBar getFoobar(@PathVariable int foobarId, @PathVariable String name) { for (FooBar foobar : fooBarSet) { if (foobar.getId() == foobarId && foobar.getName().equalsIgnoreCase(name)) return foobar; } return null; } } |
Now it is time to test the web service for different inputs..
1 2 3 | curl -i "http://springmvc-rest.cloudfoundry.com/foobaresample2/1" -X GET curl -i "http://springmvc-rest.cloudfoundry.com/foobaresample2/1/techiekernel1" -X GET |
I have deployed the application in cloud space and it is available for you to test. You can use the above URLs to test from your side..
Source Code:
You can pull the source code from GitHub.
can you please describe a bit more how you have use @PathParam and what is the exact difference between @Path and @PathParam
ReplyDelete@Sahej: both are part of your request URI. But @Path is the actual path to access a web service and @PathParam is used, if you want to extract some data from URI.. If you check the next example you can see how to retrieve the request attributes also.. I think after that your doubts will be clear..
ReplyDelete