[SpringBoot]实现前后端分离_RESTful Web实践

前后端分离_RESTful Web实践

现在主流都是Spring+RESTful Web项目的开发方式,它有别于我们传统的MVC模式

RESTful Web 服务与传统的 MVC 开发一个关键区别是返回给客户端的内容的创建方式:

传统的 MVC 模式开发会直接返回给客户端一个视图,但是 RESTful Web 服务一般会将返回的数据以 JSON 的形式返回,这也就是现在所推崇的前后端分离开发

Lombok

有了它,我们只需要添加一个注解@data,就可以省略平常很多繁琐的操作,让代码更加优美

将依赖坐标添加到你的maven_pom.xml文件:

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.10</version>
</dependency>

下载 IDEA 中支持 lombok 的插件:

创建实体类的包并创建实体类Book

import lombok.Data;
@Data
public class Book {
    private String name;
    private String description;
}

添加控制类

package com.junsir.testspringboot.Controller;

import com.junsir.testspringboot.entity.Book;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/*
* `@RestController` 将返回的对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中。
* 绝大部分情况下都是直接以 JSON 形式返回给客户端,很少的情况下才会以 XML 形式返回。
* 转换成 XML 形式还需要额为的工作,代码中演示的直接就是将对象数据直接以 JSON 形式写入 HTTP 响应(Response)中。
* 关于`@Controller`和`@RestController` 的对比,后续说明。
* */

@RestController
/*
* `@RequestMapping` :
* 没有指定 GET 与 PUT、POST 等,因为`@RequestMapping`默认映射所有HTTP Action
* 你可以使用`@RequestMapping(method=ActionType(post/get))`来缩小这个映射。
* */
@RequestMapping("/api")
public class BookController {

    private List<Book> books = new ArrayList<>();

    /*
    * `@PostMapping`实际上就等价于 `@RequestMapping(method = RequestMethod.POST)`
    * 同样的 `@DeleteMapping` ,`@GetMapping`也都一样,常用的 HTTP Action 都有一个这种形式的注解所对应
    * */
    @PostMapping("/book")
    /*
    * `@RequestBody`:可以将 \HttpRequest\ body 中的 JSON 类型数据反序列化为合适的 Java 类型。
    * */
    public ResponseEntity<List<Book>> addBook(@RequestBody Book book) {
        books.add(book);
        return ResponseEntity.ok(books);
    }

    @DeleteMapping("/book/{id}")
    /*
    * `@PathVariable` :取url地址中的参数。
    * */
    public ResponseEntity deleteBookById(@PathVariable("id") int id) {
        books.remove(id);
        return ResponseEntity.ok(books);
    }

    @GetMapping("/book")
    /*`@RequestParam `:url的查询参数值。*/
    public ResponseEntity getBookByName(@RequestParam("name") String name) {
        List<Book> results = books.stream().filter(book -> book.getName().equals(name)).collect(Collectors.toList());
        return ResponseEntity.ok(results);
    }
}

使用PostMan测试接口:

POST请求成功

Get请求成功

原创文章 197 获赞 142 访问量 6万+

猜你喜欢

转载自blog.csdn.net/JunSIrhl/article/details/105757256