- http(s)://myserver.com:8080/app-name/{version-no}/{domain}/{rest-reource-convetion}
- http(s)://myserver.com:8080/accounting-services/1.0/forecasting/accounts
- http(s)://myserver.com:8080/accounting-services/1.0/forecasting/account/123/transaction/567
What if you want to list a collection of transactions that are greater than a particular date?
- http(s)://myserver.com:8080/accounting-services/1.0/forecasting/account/123/transactions/search?txn-date=20120201
- http(s)://myserver.com:8080/accounting-services/1.0/forecasting/account/123/transaction
Finally, you can also control which method gets executed with the help of HTTP headers or host names in the URL. Let's see some Spring MVC examples in a controller class as to how it maps a request URI, headers, etc to execute the relevant method on the server side.
Here is the sample code with GET requests
@Controller
@RequestMapping("/forecasting")
public class CashForecastController
{
@RequestMapping(
value = "/accounts,
method = RequestMethod.GET,
produces = "application/json")
@ResponseBody
public AccountResult getAllAccounts(HttpServletResponse response) throws Exception
{
//get the accounts via a service and a dao layers
}
@RequestMapping(
value = "/accounts.csv,
method = RequestMethod.GET,
produces = "text/csv")
@ResponseBody
public void getAllAccounts(HttpServletResponse response) throws Exception
{
//produces a CSV download file
}
@RequestMapping(
value = "/account/{accountCd}",
method = RequestMethod.GET,
produces = "application/json")
@ResponseBody
public Account getAccount(
@PathVariable(value = "accountCd") String accountCode, HttpServletResponse response) throws Exception
{
//get the accounts via a service and a dao layers
}
//accept only if there is a special header
@RequestMapping(
value = "/account/{accountCd}",
method = RequestMethod.GET,
headers =
{
"operation=special"
}
produces = "application/json")
@ResponseBody
public Account getAccountSpecial(
@PathVariable(value = "accountCd") String accountCode, HttpServletResponse response) throws Exception
{
//get the accounts via a service and a dao layers
//special handling based
}
@RequestMapping(
value = "/account/{accountCd}/transaction/{transactionId}",
method = RequestMethod.GET,
produces = "application/json")
@ResponseBody
public Transaction getTransaction(
@PathVariable(value = "accountCd") String accountCode,
@PathVariable(value = "transactionId") String txnId,
HttpServletResponse response) throws Exception
{
//get the accounts via a service and a dao layers
//accountCode and txnId can be used here
}
@RequestMapping(
value = "/account/{accountCd}/transactions/search",
method = RequestMethod.GET,
produces = "application/json")
@ResponseBody
public TransactionResult getTransactions(
@PathVariable(value = "accountCd") String accountCode,
@RequestParam(value = "txn-date", required = true) @DateTimeFormat(pattern = "yyyyMMdd") Date txnDate,
HttpServletResponse response) throws Exception
{
//get the accounts via a service and a dao layers
//accountCode and txnDate can be used here
}
}
Here is the sample code with POST and PUT requests
@Controller
@RequestMapping("/forecasting")
public class CashForecastController
{
@RequestMapping(
value = "/account/transaction",
method = RequestMethod.POST)
public @ResponseBody Transaction addTransaction(@RequestBody Transaction txn, HttpServletResponse response)
throws Exception
{
//logic to create a new Transaction records via service and dao layers
}
@RequestMapping(
value = "/account/transaction",
method = RequestMethod.PUT)
public @ResponseBody Transaction modifyTransaction(@RequestBody Transaction txn, HttpServletResponse response)
throws Exception
{
//logic to modify a Transaction record via service and dao layers
}
}
Do's and Don'ts
|