RESTful Web Services – 第一个应用程序
REST (Representational State Transfer)是一种设计Web服务的架构风格。而RESTful Web服务便是符合REST风格设计的Web服务。这种服务通过HTTP请求(GET,POST,PUT,DELETE等)进行交互,请求和响应的数据格式一般采用XML或JSON。
本文将向你展示如何搭建一个简单的RESTful Web服务,使用Spring Boot框架和Maven构建工具。
1. 创建Spring Boot项目
首先,我们需要创建一个Spring Boot项目。在项目启动类上,使用@SpringBootApplication注解,这个注解会为Spring Boot提供多个默认配置。
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
2. 添加依赖
我们需要在pom.xml文件中添加Spring Boot和相关依赖。
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
</dependencies>
spring-boot-starter-web是一个包含Spring MVC和Tomcat等的依赖,可以实现RESTful Web服务相关的功能。同时,我们还需要添加jackson-databind,这是一种处理JSON数据的Java库,将Java对象(POJO)和JSON数据进行转换。
3. 编写Controller
在RESTful Web服务中,Controller是处理HTTP请求的组件,控制器会根据不同的HTTP请求类型和URI执行相应的方法。
我们先来看一个最简单的例子,创建一个HelloController,响应一个/hello请求。
@RestController
public class HelloController {
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String sayHello() {
        return "Hello, World!";
    }  
}
首先,我们使用@RestController注解将该类声明为RESTful Web服务的Controller,同时也可以使用@Controller注解,这会将该类注册为Spring MVC的Controller。
然后,我们在sayHello方法上使用@RequestMapping注解,指定了请求URI为/hello,HTTP请求类型为GET。在这个方法中,我们返回一个字符串。
接下来,我们可以运行应用程序,然后在浏览器中输入http://localhost:8080/hello,就可以看到Hello, World!输出在页面上了。
4. POST 请求和响应
我们来实现一个简单的POST方法,用于接受JSON数据,并返回一个JSON格式的响应。
@RestController
public class UserController {
    private Map<String, User> users = new HashMap<>();
    @RequestMapping(value = "/user/{name}", method = RequestMethod.GET)
    public User getUser(@PathVariable("name") String name) {
        return users.get(name);
    }
    @RequestMapping(value = "/user", method = RequestMethod.POST)
    public User addUser(@RequestBody User user) {
        users.put(user.getName(), user);
        return user;
    }
}
我们使用@PathVariable注解指定了请求参数,指定了/user/{name},这意味着参数名为name,同时该URI可以匹配任何包含在{name}中的文本。
我们还使用了@RequestBody注解,将请求的JSON数据自动转换为User类的实例。在addUser方法中做了一些简单的处理,并返回该用户数据。
我们现在运行应用程序,使用HTTP客户端,向/userURL发送JSON数据,以创建一个新的用户记录:
POST /user HTTP/1.1
Content-Type: application/json
{
    "name": "John Doe",
    "age": 30
}
服务器将处理请求,并返回类似以下这样的JSON格式数据:
{
  "name": "John Doe",
  "age": 30
}
5. 错误处理
最后,我们需要处理一些错误情况。我们使用Spring Boot的错误处理机制来处理不同类型的异常,返回一些错误响应。
@ControllerAdvice
public class ExceptionHandlerController {
    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<ErrorResponse> resourceNotFound(ResourceNotFoundException ex) {
        ErrorResponse errorResponse = new ErrorResponse();
        errorResponse.setErrorCode(HttpStatus.NOT_FOUND.value());
        errorResponse.setErrorMessage(ex.getMessage());
        return new ResponseEntity<ErrorResponse>(errorResponse, HttpStatus.NOT_FOUND);
    }
}
我们使用@ControllerAdvice将异常处理器来注册为Spring中的Bean,当有异常被抛出时,该类会捕获该异常并处理。
在resourceNotFound方法中,我们构造一个自定义错误响应类ErrorResponse并设置了对应的错误CODE以及相应消息。
结论
这是一个非常基本的RESTful Web服务应用程序,演示了如何使用Spring Boot和Maven来创建一个简单的RESTful Web服务。掌握此应用程序的基本知识后,将可在此基础上创建更加高级的RESTful Web服务。现在,你可以开始尝试修改或扩展这个应用程序来适应你的业务需求。
 极客笔记
极客笔记