creating spring rest services without using spring boot creating spring rest services without using spring boot spring spring

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"}