[Spring Guides] Restful Web 服务

本章节将引导你完成使用Spring创建 “hello world” RESTful Web服务。
你将构建一个将接受 http://localhost:8080/greeting HTTP GET请求的服务。

maven构建应用程序

pom.xml 配置如下:



    4.0.0

    com.example
    hello
    0.0.1-SNAPSHOT
    jar

    hello
    Demo project for Spring Boot

    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.6.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            com.jayway.jsonpath
            json-path
            test
        

    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

    
        
            spring-releases
            https://repo.spring.io/libs-release
        
    
    
        
            spring-releases
            https://repo.spring.io/libs-release
        
    

Spring Boot Maven插件提供了许多方便的功能:

  • 它收集类路径上的所有jars构建出一个可运行的 "über-jar",使执行和移动你的服务更方便。
  • 它会自动寻找public static void main() 方法并标记为可执行类。
  • 它提供了一个内置的依赖解析器,它将版本号设置为与Spring Boot依赖关系相匹配。您可以覆盖任何您想要的版本,但它将默认为Boot的所选版本集。
创建一个资源表示类

该服务处理GET请求, GET请求应该返回200 OK的响应。它应该看起来像这样:

{
    "id": 1,
    "content": "Hello, World!"
}

为此需要创造一个资源表示类为id和content提供POJO:

package hello;

public class Greeting {

    private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}
创建一个资源表示类的控制器

在Spring的RESTful Web服务构建方法中,HTTP请求由控制器处理。这些组件可以通过@RestController注释轻松识别。

下面的GreetingController通过返回Greeting类的新实例来处理GET请求/ greeting:

package hello;

import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
        return new Greeting(counter.incrementAndGet(),
                        String.format(template, name));
    }
}
  • @RequestMapping注解确保对/ greeting 的HTTP请求映射到greeting()方法。
  • @RequestParam将对应名称的值绑定到greeting()方法的name参数中。
  • 方法体通过idcontent创建并返回一个新的Greeting对象。
  • 通过counter的 incrementAndGet() 方法实现id的自动计数
  • 通过greeting template 格式化name
编写应用程序执行主体
package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

通过这样,使用Spring的支持将Tomcat servlet容器嵌入到HTTP运行时,而不需要部署到外部应用程序服务器。

运行效果如下:

[Spring Guides] Restful Web 服务_第1张图片
程序运行效果图

你可能感兴趣的:([Spring Guides] Restful Web 服务)