Spring Boot 构建一个REST Web服务

淮城一只猫 · · 160次浏览 ·

前言

使用Spring Boot做一个实例,在请求一个地址http://localhost:8080/greeting响应的数据是JSON数据如下:

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

并且URL有一个参数name,例如:http://localhost:8080/greeting?name=User则会动态显示响应返回的数据:

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

实例

编写表示类

复制之前编写的项目,pom.xml依然使用原来。从上面得知id字段是问候语的唯一标识符,并且content是问候语的展示。新建src/main/java/hello/Greeting.java

package hello;

public class Greeting {

    private final long id;
    private final String content;

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

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }

}

正如你所见,Spring使用Jackson JSON库将Greeting的实例自动转换类型为JSON数据。

编写控制类

在Spring构建RESTful Web服务的方法中,HTTP请求由控制器处理。这些组件很容易通过@RestController注解来识别,GreetingController下面的处理GET请求/greeting通过返回类的新实例Greeting:

新建src/main/java/hello/GreetingController.java

package hello;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.atomic.AtomicLong;

@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注解可以确保HTTP请求/greeting映射到greeting()方法。

@RequestParam将请求的参数name绑定到greeting()方法里,如果没有name参数的话,则会使用defaultValue的默认值。

main()方法实现动态值创建并返回一个Greeting带有idcontent属性的新对象,并使用模板格式化内容。

运行程序

编写程序入口src/main/java/hello/Application.java

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

}

@SpringBootApplication是一个很强大的注解:

  • @Configuration 将该类标记为bean定义的来源。
  • @EnableAutoConfiguration的作用启动自动的配置,@EnableAutoConfiguration注解的意思就是Springboot根据你添加的jar包来配置你项目的默认配置,比如根据spring-boot-starter-web ,来判断你的项目是否需要添加了webmvctomcat,就会自动的帮你配置web项目中所需要的默认配置。在下面博客会具体分析这个注解,快速入门的demo实际没有用到该注解。
  • @ComponentScan,扫描当前包及其子包下被@Component@Controller@Service@Repository注解标记的类并纳入到spring容器中进行管理。是以前的<context:component-scan>(以前使用在xml中使用的标签,用来扫描包配置的平行支持)。

启动

到此为止实例功能基本可以实现了,访问http://localhost:8080/greeting查看效果如何。


淮城一只猫

永远年轻,永远热泪盈眶

发表评论

电子邮件地址不会被公开。 必填项已用*标注

我不是机器人*