In previous post, we have already seen Spring Restful web services which returns json as response.In this post, we will extend same example and create Restful web services which will provide CRUD(Create, read, update and delete) operation example.If you want complete integration with hibernate and mysql, you can go through Spring Restful hibernate mysql example.

We will use following annotations for CRUD operation.

Method

Description

Get

It is used to read resource

Post

It is used to create new resource.
It is not idempotent method

Put

It is generally used to update resource.It is idempotent method

Delete

It is used to delete resource

Idempotent means result of multiple successful request will not change state of resource after initial application
For example :
Delete is idempotent method because when you first time use delete, it will delete the resource (initial application) but after that, all other request will have no result because resource is already deleted.

Post is not idempotent method because when you use post to create resource , it will keep creating resource for each new request, so result of multiple successful request will not be same.

Maven dependencies

2) We need to add Jackson json utility in the classpath.

1

2

3

4

5

6

7

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.4.1</version>

</dependency>

Spring will load Jackson2JsonMessageConverter into its application context automatically. Whenever you request resource as json with accept headers=”Accept=application/json”, then Jackson2JsonMessageConverter comes into picture and convert resource to json format.

4) create a xml file named springrest-servlet.xml in /WEB-INF/ folder.Please change context:component-scan if you want to use different package for spring to search for controller.Please refer to spring mvc hello world example for more understanding.

Create Service class

6) Create a class CountryService.java in package org.arpit.java2blog.service
It is just a helper class which should be replaced by database implementation. It is not very well written class, it is just used for demonstration.

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

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import org.arpit.java2blog.bean.Country;

/*

* It is just a helper class which should be replaced by database implementation.

* It is not very well written class, it is just used for demonstration.

*/

publicclassCountryService{

staticHashMap<Integer,Country>countryIdMap=getCountryIdMap();

publicCountryService(){

super();

if(countryIdMap==null)

{

countryIdMap=newHashMap<Integer,Country>();

// Creating some objects of Country while initializing

Country indiaCountry=newCountry(1,"India",10000);

Country chinaCountry=newCountry(4,"China",20000);

Country nepalCountry=newCountry(3,"Nepal",8000);

Country bhutanCountry=newCountry(2,"Bhutan",7000);

countryIdMap.put(1,indiaCountry);

countryIdMap.put(4,chinaCountry);

countryIdMap.put(3,nepalCountry);

countryIdMap.put(2,bhutanCountry);

}

}

publicList getAllCountries()

{

List countries=newArrayList(countryIdMap.values());

returncountries;

}

publicCountry getCountry(intid)

{

Country country=countryIdMap.get(id);

returncountry;

}

publicCountry addCountry(Country country)

{

country.setId(getMaxId()+1);

countryIdMap.put(country.getId(),country);

returncountry;

}

publicCountry updateCountry(Country country)

{

if(country.getId()<=0)

returnnull;

countryIdMap.put(country.getId(),country);

returncountry;

}

publicvoiddeleteCountry(intid)

{

countryIdMap.remove(id);

}

publicstaticHashMap<Integer,Country>getCountryIdMap(){

returncountryIdMap;

}

// Utility method to get max id

publicstaticintgetMaxId()

{intmax=0;

for(intid:countryIdMap.keySet()){

if(max<=id)

max=id;

}

returnmax;

}

}

7) It ‘s time to do maven build.

Right click on project -> Run as -> Maven build

8) Provide goals as clean install (given below) and click on run

Run the application

9) Right click on project -> run as -> run on server

Select apache tomcat and click on finish

10) We will test this application in postman , UI based client for testing restful web applications. It is chrome plugin. Launch postman.If you want java based client, then you can also use how to send get or post request in java.

Get method

Post method

12) Post method is used to create new resource. Here we are adding new Country England to country list, so you can see we have used new country json in post body.URL: “http://localhost:8080/SpringRestfulWebServicesCRUDExample/countries”.

Use get method to check if above country have been added to country list.

Put Method

13) Put method is used to update resource. Here will update population of nepal using put method.
We will update country json in body of request.URL : “http://localhost:8080/SpringRestfulWebServicesCRUDExample/countries”

Use get method to check population of nepal.

Delete method

14) Delete method is used to delete resource.We will pass id of country which needs to be deleted as PathParam. We are going delete id:4 i.e. china to demonstrate delete method.