Programing

스프링 부트를 사용하지 않고 스프링 레스트 서비스 생성

lottogame 2020. 11. 22. 18:51
반응형

스프링 부트를 사용하지 않고 스프링 레스트 서비스 생성


REEST 서비스 https://spring.io/guides/gs/rest-service/ 구축을 위해 spring.io의 Getting Started 튜토리얼을 따랐습니다 . 문제는이 튜토리얼이 스프링 부트를 사용하여 내장 된 tomcat이있는 독립 실행 형 jar를 생성하는 방법만을 설명한다는 것입니다.

예를 들어 이미 존재하는 tomcat 인스턴스에 배포 할 전쟁을 생성하기 위해 처음부터 프로젝트를 만드는 방법이 있습니까?

추신 : 동일한 문제에 관한 stackoverflow 에서 Tomcat의 JAR 대신 WAR로 이전 스레드 Spring RESTful Service를 발견했습니다 . 문제는 외부 바람둥이 컨테이너에서 작동하도록 독립형 앱 스프링 부트 프로젝트를 수정하는 방법을 찾고 있지 않기 때문에 수락 된 답변과 제안이 내 문제를 정확히 해결하지 못한다는 것입니다. 스프링 부트를 전혀 포함하지 않는 '깨끗한'솔루션. (여기서 어떻게 행동해야하는지 정확히 모르겠습니다. 여전히 stackoverflow에서 아주 새로운 것입니다. 새로운 질문을 여는 것이 올바른 절차이기를 바랍니다.)


나머지 컨트롤러를 만드는 데 Spring Boot가 필요하지 않습니다.

MVC https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#spring-web 설정 방법에 대한 스프링 프레임 워크 문서를 따르십시오.

MVC 설정 ( DispatcherServlet)은 스프링 버전에 따라 다르며 xml을 사용하거나 프로그래밍 방식으로 설정할 수 있습니다. https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc -서블릿

이 설정이 완료되면 나머지 컨트롤러를 애플리케이션에 추가 할 수 있습니다. 나머지 주 제어부 (것을 @RestController주석)를 결합 해당 스테레오 주석이다 @ResponseBody하고 @Controller, 다시 말해서 상기 제어기는 상기 응답 본체 객체 대신 볼 복귀를 반환.

이것은 내가 위에서 말한 것을 설명하는 완벽한 예입니다. http://www.programming-free.com/2014/01/spring-mvc-40-restful-web-services.html


다음은 또 다른 예입니다.

디렉토리 레이아웃 :

.
├── ./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);
    }
}

빌드 및 실행 :

mvn clean install
mvn jetty:start

테스트:

> 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)

수신 된 콘텐츠 :

{
    "msg": "Hello World"
}

참고 URL : https://stackoverflow.com/questions/29416804/creating-spring-rest-services-without-using-spring-boot

반응형