首页 文章

无需使用 spring 靴即可创建 spring 休息服务

提问于
浏览
52

我已经按照spring.io上的入门教程来构建REEST服务https://spring.io/guides/gs/rest-service/ . 问题是本教程仅解释了如何使用spring boot嵌入tomcat来生成独立运行的jar .

有没有办法从头开始创建一个项目来生成一个战争来部署,例如在已经存在的tomcat实例上?

PS:我在stackoverflow上发现了一个关于同一问题的前一个线程Spring RESTful Service as a WAR instead of JAR in Tomcat . 问题是,所接受的答案和建议并没有找到修改独立应用程序 spring 启动项目的方法,以便它可以在外部tomcat容器上运行,但是想找到一个根本不涉及 spring 启动的'cleaner'解决方案 . (我不确定如何在这里表现,在stackoverflow上仍然很新 . 我希望打开一个新问题是正确的程序) .

2 回答

  • 6

    您不需要Spring Boot来创建休息控制器 .

    请按照 spring 框架文档了解如何设置MVC https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#spring-web

    MVC设置( DispatcherServlet )取决于您的spring版本,您可以使用xml,也可以通过编程方式进行设置:https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-servlet

    设置完成后,您可以向应用程序添加休息控制器 . 请注意,休止控制器( @RestController 注释)是一个构造型注释,它结合了 @ResponseBody@Controller ,换句话说,Controller返回响应体中的对象而不是返回视图 .

    这是一个完美的例子,解释了我上面所说的内容:http://www.programming-free.com/2014/01/spring-mvc-40-restful-web-services.html

  • 44

    这是另一个例子:

    目录布局:

    .
    ├── ./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(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"
    }
    

    可以从here下载 .

相关问题