Spring Getting Started (1):构建一个RESTful的web服务

本文内容翻译自:http://spring.io/guides/gs/rest-service/

创建一个资源表示类

为了给greeting的表示建模,我们创建一个资源表示类,它是一个POJO,带有id和content数据。

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

接下来我们会使用Jackson JSON 库来自动地把Greeting实例对象整理成JSON

创建一个资源控制器

用Spring的方法来构建一个RESTful web services,HTTP请求通过控制器来处理。这些组件可以轻易地通过注解@RestController被识别出来,下面的RestController 类处理/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()方法。
上面的例子没有指明处理的是GET还是POST方法,因为默认@RequestMapping会映射所有的HTTP请求操作,可以使用@RequestMapping(method=GET)来指定需要映射的HTTP请求方法。
@RequestParam将请求参数“name”绑定到greeting方法的“name”参数上。如果请求中不带这个参数,则使用默认值“World”。
在方法体中,我们创建并返回了一个新的greeting对象,通过使用greeting模板把name格式化。
和传统的MVC控制器的一个关键的不同是,这里就创建了一个响应,而不是依赖view层技术来渲染服务器端的greeting数据到HTML上。RESTful web服务控制器简单地返回一个Greeting对象,对象的数据会以JSON的方式直接写到HTTP响应上。
这段代码使用到了Spring 4的一个新的注解@RestController,它会把一个类标记做为一个控制器,控制器的每个方法返回一个domain对象而不是view。
Greeting对象需要转换成JSON。但我们不用手动转换,因为Jackson 2已经在类路径上,Spring会自动选择MappingJackson2HttpMessageConverter来将Greeting实例转化成JSON。

让应用可执行

虽然可以把这个服务打包成传统的WAR包部署到一个外部服务器上,更简单的方法是创建一个单独的应用,把所有的东西打包成一个Jar包,程序的入口为main函数。我们使用Spring提供的支持把Tomcat的Servlet容器植入作为HTTP运行环境,而不是部署到外部服务器。

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

@SpringBootApplication是一个方便的注解,它添加了以下注解:

  • @Configuration 标志一个类作为应用上下文中的bean的定义的来源
  • @EnableAutoConfiguration 告诉Spring Boot基于类路径设置,其他bean和各种各样的属性设置来开始添加bean
  • 通常我们需要为Spring MVC应用添加@EnableWebMvc 注解,但Spring Boot在类路径下发现spring-webmvc时会自动添加该注解。它标志着这个应用是一个WEB应用并激活一些关键行为,如创建一个DispatcherServlet
  • @ComponentScan 告诉Spring在hello包中找其他组件,配置和服务

main方法使用Spring Boot的SpringApplication.run()方法来启动应用,注意,这里没有一行XML,也没有xml文件,这个web应用是100%的Java代码。

构建一个可执行的jar

我们可以从命令行使用maven运行这个应用,或者构建一个单独的可执行jar文件,该文件包含所有必要的依赖,class文件和资源。这让传输,版本控制,部署这个服务作为一个应用更加容易。使用maven时,可以使用./mvnw spring-boot:run运行程序,或者使用./mvnw clean package 构建一个jar包,然后运行jar文件:java -jar target/gs-rest-service-0.1.0.jar
此时通过浏览器访问网址:http://localhost:8080/greeting 就可以看到结果了!

猜你喜欢

转载自blog.csdn.net/u012124304/article/details/77503334