creating spring rest services without using spring boot
You don't need Spring Boot to create a rest controller.
Please follow the spring framework documentation on how to setup MVChttps://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#spring-web
The MVC setup (the DispatcherServlet
) depends on your spring version, you can either use xml or you can setup programmatically:https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-servlet
Once this is setup, you can add a rest controller to your application. Note that a rest controller (the @RestController
annotation) is a stereotype annotation that combines @ResponseBody
and @Controller
, in other words the Controller returns an object in the response body instead of returning a view.
This is a perfect example explaining what I said above:http://www.programming-free.com/2014/01/spring-mvc-40-restful-web-services.html
Here is another example:
Directory Layout:
.├── ./pom.xml└── ./src └── ./src/main ├── ./src/main/java │ └── ./src/main/java/biz │ └── ./src/main/java/biz/tugay │ └── ./src/main/java/biz/tugay/restfulspring │ └── ./src/main/java/biz/tugay/restfulspring/config │ ├── ./src/main/java/biz/tugay/restfulspring/config/RestfulHello.java │ └── ./src/main/java/biz/tugay/restfulspring/config/WebAppInitalizer.java └── ./src/main/webapp └── ./src/main/webapp/WEB-INF └── ./src/main/webapp/WEB-INF/web.xml
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>biz.tugay</groupId> <artifactId>restfulSpring</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>restfulSpring Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.16.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.16.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.16.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.16.RELEASE</version> </dependency> </dependencies> <build> <finalName>restfulSpring</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.2.1.v20140609</version> </plugin> </plugins> </build></project>
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"></web-app>
WebAppInitalizer.java
package biz.tugay.restfulspring.config;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;@Configuration@EnableWebMvc@ComponentScan("biz.tugay.restfulspring")public class WebAppInitalizer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected String[] getServletMappings() { return new String[]{"/*"}; } @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[]{WebAppInitalizer.class}; } @Override protected Class<?>[] getServletConfigClasses() { return new Class[0]; }}
RestfulHello.java
package biz.tugay.restfulspring.config;import org.springframework.http.HttpHeaders;import org.springframework.http.HttpStatus;import org.springframework.http.MediaType;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping(value = "/")public class RestfulHello { @RequestMapping(value = "hello") public ResponseEntity<String> sayHello() { final HttpHeaders httpHeaders= new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); return new ResponseEntity<String>("{\"msg\": \"Hello World\"}", httpHeaders, HttpStatus.OK); }}
Build and run:
mvn clean installmvn jetty:start
Test:
> GET /hello HTTP/1.1> Host: localhost:8080> User-Agent: insomnia/5.15.0> Accept: */*< HTTP/1.1 200 OK< Date: Fri, 27 Apr 2018 00:06:07 GMT< Content-Type: application/json< Content-Length: 22< Server: Jetty(9.2.1.v20140609)
Content received:
{ "msg": "Hello World"}