spring boot 2.x restful web 应用

676 阅读2分钟

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

先看 spring boot 2.x 零基础快速入门

基于上述代码修改

使用 @RestController 可以方便地编写 REST 服务,Spring 默认使用 JSON 作为输入和输出。

1、编写 RestController

编写 Rest Controller 只需要遵循以下要点:

总是标记 @RestController 而不是 @Controller@Component

使用 @RestController 替代 @Controller 后,每个方法自动变成 API 接口方法。输入和输出只要能被 Jackson 序列化或反序列化为 JSON 就没有问题。

编写 ApiController 如下:

@RestController
public class ApiController
{
    @GetMapping("/users")
    public List<String> users(@RequestParam(value = "user_name") String userName )
    {
        return List.of("Apple", "Orange", "Banana", userName);
    }

    @GetMapping("/user/{user_name}")
    public String user(@PathVariable("user_name") String userName)
    {
        return userName;
    }
}

@GetMapping 表示 GET 类型的请求,括号里面的值 "/users" 表示请求地址

@RequestParam 用于获取查询参数

@PathVariable 用于获取路径参数

如果方法参数需要传入HttpServletRequestHttpServletResponse 或者 HttpSession,直接添加这个类型的参数即可,Spring MVC 会自动按类型传入

测试如下:

192.168.123.100:8080/users?user_name=langya

即传入请求参数 user_name

image-20210730103538332

192.168.123.100:8080/user/langya

即传入path路径传入参数 langya

image-20210730103829293

2、请求地址分组

对 URL 进行分组,每组对应一个 Controller 是一种很好的组织形式,有效避免重复的URL映射。例如:

@RestController
@RequestMapping("/api")
public class ApiController{
  
}

此时上述的API请求路径变成 前缀(api)+ 路径,如 /api/usesrs

3、请求与传参

常见的请求类型:

  • GET :请求从服务器获取特定资源。
  • POST :在服务器上创建一个新的资源。
  • PUT :更新服务器上的资源(客户端提供更新后的整个资源)。
  • DELETE :从服务器删除特定的资源。
  • PATCH :更新服务器上的资源(客户端提供更改的属性,可以看做作是部分更新)

POST

  • ReuqestBody 主要是处理 json 串格式的请求参数,要求使用方指定 header content-type:application/json
  • RequestBody 通常要求调用方使用 post 请求(也可以使用其他类型
  • RequestBody 接收到数据之后会自动将数据绑定到 Java 对象。系统会使用HttpMessageConverter或者自定义的HttpMessageConverter将请求的 body 中的 json 字符串转换为 java 对象。

定义传入参数 UserParam

这里使用了 lombok 依赖库 —— 为了精简代码,不用写一堆SET、GET属性函数

package com.langyastudio.springboot.bean.dto;

import lombok.Data;

/**
 * user 传入参数
 */
@Data
public class UserParam
{
    private String userName;
    private String nickName;
    private String telephone;
}

定义接口

@RestController
@RequestMapping("/api")
public class ApiController
{
    @PostMapping("/user/add")
    public UserParam addUser(@RequestBody UserParam userParam)
    {
        return userParam;
    }

    @PostMapping("/user/addex")
    public Map<String, Object> addUserEx(@RequestBody Map<String, Object> params)
    {
        return params;
    }
}

@RequestBody 既可以使用 bean 实体类接收传入参数(建议使用),也可以使用 Map 接收(可读性、可维护性差)

测试如下:

192.168.123.100:8080/api/user/add

使用 Postman 测试时需要注意,使用 Body -> raw -> json

image-20210730110351122

一个请求方法只可以有一个@RequestBody,但是可以有多个 @RequestParam@PathVariable

完整代码:github.com/langyastudi…