SpringBoot使用RESTful接口详解

SpringBoot使用RESTful接口详解

什么是RESTful接口

RESTful是一种基于HTTP协议实现的Web服务的架构风格,其常用于构建分布式的网络应用程序和服务。RESTful接口设计的核心是资源的定义和状态的转换,它通过使用HTTP协议规定的方法(GET、POST、PUT、DELETE等),操作网络上的资源。HTTP中的资源可以是任何东西,例如文本、图片、视频和数据库中的记录等。

SpringBoot支持RESTful

SpringBoot天生就支持构建RESTful API接口,其提供了一些注解和类帮助我们根据不同的HTTP请求方法来处理相应的请求,接口的形式也更加简单、灵活、易维护。

@RestController

@RestController是SpringBoot中专门用于处理RESTful接口请求的注解,在SpringBoot版本中它整合了@ResponseBody注解,可以直接将返回结果序列化成JSON或XML格式,避免了我们手动编写序列化工具的麻烦。例如:

@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/{id}")
    public User getUserById(@PathVariable("id") Integer id) {
        // 查询用户信息并返回
        return userService.getUserById(id);
    }

    @PostMapping("/")
    public void addUser(@RequestBody User user) {
        // 添加用户信息
        userService.addUser(user);
    }

    @PutMapping("/{id}")
    public void updateUser(@PathVariable("id") Integer id, @RequestBody User user) {
        // 更新用户信息
        userService.updateUserById(id, user);
    }

    @DeleteMapping("/{id}")
    public void deleteUserById(@PathVariable("id") Integer id) {
        // 删除用户信息
        userService.deleteUserById(id);
    }
}

在上述代码中,我们使用@RestController注解标注该类是RESTful接口,我们定义了四个方法,分别是获取用户信息、添加用户信息、更新用户信息和删除用户信息。我们使用@GetMapping、@PostMapping、@PutMapping和@DeleteMapping注解来定义相应的HTTP请求方法。

@PathVariable

@PathVariable注解表示从URL中提取参数,使用在@RequestMapping注解后面的路径定义中,例如:

@GetMapping("/{id}")
public User getUserById(@PathVariable("id") Integer id) {
    // 查询用户信息并返回
    return userService.getUserById(id);
}

在上述代码中,我们使用@PathVariable注解从URL路径中提取了参数id,然后根据id从数据库中查询出用户信息并返回。在请求URL中,我们可以通过/user/1来获取id=1的用户信息。

@RequestBody

@RequestBody注解表示将HTTP消息体中的json字符串绑定到方法参数上,例如:

@PostMapping("/")
public void addUser(@RequestBody User user) {
    // 添加用户信息
    userService.addUser(user);
}

在上述代码中,我们使用@RequestBody注解将HTTP请求中的json字符串解析成User对象,并传递给addUser方法。

示例1:实现URL短链接接口

假设我们要实现一个URL短链接接口,接收长链接并返回对应的短链接。我们可以使用如下代码实现:

@RestController
@RequestMapping("/url")
public class UrlController {
    private static final String DOMAIN = "https://www.shorturl.com/";
    private static final String CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static final int LENGTH = 6;
    private static final Map<String, String> URL_MAP = new ConcurrentHashMap<>();

    @PostMapping("/")
    public String generateShortUrl(@RequestBody String longUrl) {
        String shortUrl = "";
        // 先从缓存中查找是否已经生成了对应的短链接
        for (Map.Entry<String, String> entry : URL_MAP.entrySet()) {
            if (Objects.equals(longUrl, entry.getValue())) {
                shortUrl = DOMAIN + entry.getKey();
                break;
            }
        }
        // 若未生成短链接,则生成
        if (StringUtils.isBlank(shortUrl)) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < LENGTH; i++) {
                int rand = (int) (Math.random() * CHARS.length());
                sb.append(CHARS.charAt(rand));
            }
            shortUrl = DOMAIN + sb.toString();
            URL_MAP.put(sb.toString(), longUrl);
        }
        return shortUrl;
    }

    @GetMapping("/{shortUrl}")
    public void redirect(@PathVariable("shortUrl") String shortUrl, HttpServletResponse response) throws IOException {
        // 从短链接中获取长链接,并重定向到长链接
        String longUrl = URL_MAP.get(shortUrl);
        if (StringUtils.isNotBlank(longUrl)) {
            response.sendRedirect(longUrl);
        } else {
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
        }
    }
}

在上述代码中,我们定义了一个UrlController,我们使用@RestController注解标注它是一个SpringBoot的RESTful接口类,我们使用@RequestMapping注解定义了"/url"作为接口路径。我们定义了两个方法,分别是生成短链接和重定向到长链接。

在生成短链接的方法中,我们先查找缓存中是否已经生成对应的短链接,如果未生成则生成一个新的短链接并加入缓存中。

在重定向到长链接的方法中,我们从短链接中获取长链接,并重定向到长链接中。

使用Postman测试,我们在请求中加入参数,例如:

{
    "longUrl": "https://www.baidu.com"
}

则可以得到返回结果:

"https://www.shorturl.com/Xbwq5d"

示例2:实现文件上传接口

SpringBoot支持文件上传,使用multipart/form-data格式提交请求。我们可以用如下代码来实现:

@RestController
@RequestMapping("/file")
public class FileController {

    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
        // 获取文件名
        String fileName = file.getOriginalFilename();
        // 保存到本地文件
        file.transferTo(new File("./" + fileName));
        return "文件上传成功!";
    }
}

在上述代码中,我们定义了一个FileController,使用@RestController标注它是一个SpringBoot的RESTful接口类,使用@RequestMapping定义了"/file"作为接口路径。使用@PostMapping定义了"/upload"作为上传文件的方法。在方法参数中,我们使用@RequestParam注解表示从HTTP请求中获取名为"file"的参数,其类型是MultipartFile。

在上传文件的方法中,我们获取文件名,然后将文件保存到本地。最后返回上传成功的提示消息。

使用Postman测试,我们选择一个文件并如下请求:

POST http://localhost:8080/file/upload HTTP/1.1
Content-Type: multipart/form-data

则可以得到返回结果:

文件上传成功!

总结

SpringBoot支持RESTful接口的构建,其注解标记和方法的定义都更加简单、灵活。我们可以根据业务需求定义相应的RESTful接口,实现复杂的业务逻辑。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot使用RESTful接口详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Spring操作JdbcTemplate数据库的方法学习

    Spring操作JdbcTemplate数据库的方法学习 什么是JdbcTemplate? JdbcTemplate是Spring框架中的一个类,它对JDBC(Java Database Connectivity) API进行了封装,使得我们在操作数据库时可以更加简单和高效。它这么做的目的是为了提高开发效率和灵活性。 JdbcTemplate提供了许多简便的…

    Java 2023年5月20日
    00
  • java实现字符串反转案例

    首先,在Java中,String类是不可变的,意味着反转字符串不会改变原字符串,而是产生一个新的字符串。下面是反转字符串的步骤: 1.将字符串转换成字符数组。2.使用双指针方法交换字符数组中的字符顺序。3.将字符数组转换回字符串。 以下是完整的Java代码示例: public class StringReverseExample { public stati…

    Java 2023年5月26日
    00
  • java控制台实现聊天程序

    要实现Java控制台的聊天程序,需要用到Socket编程以及多线程编程。 以下为实现步骤: 步骤一:建立连接 在客户端和服务端之间建立连接需要使用Socket编程。在客户端中创建一个Socket对象,指定连接的IP地址和端口号,然后发送连接请求。在服务端中创建一个ServerSocket对象,并指定端口号,然后等待客户端的连接请求,如果有客户端请求连接,则建…

    Java 2023年5月24日
    00
  • Java连接MySql的详细介绍

    Java连接MySQL是Java开发中的基础之一,因此需要掌握。下面详细介绍Java连接MySQL的步骤: 步骤1. 下载MySQL JDBC驱动 访问MySQL官方网站下载Java MySQL驱动,下载地址为:https://dev.mysql.com/downloads/connector/j/ 。下载完成后,将它放在CLASSPATH下,或者用Idea…

    Java 2023年5月19日
    00
  • Java 使用maven实现Jsoup简单爬虫案例详解

    下面我将详细讲解“Java使用maven实现Jsoup简单爬虫案例详解”的完整攻略。 什么是Maven Maven 是一种用于 Java 项目管理和构建的工具。Maven 使用一个基于项目对象模型(POM),来管理项目的构建、文档和报告的开源项目管理工具。 什么是Jsoup Jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、H…

    Java 2023年6月15日
    00
  • spring boot 中设置默认网页的方法

    在Spring Boot中设置默认网页的方法有以下两种: 1. 使用静态资源 在Spring Boot中,可以将静态资源放置在src/main/resources/static目录下,然后在该目录下创建一个名为index.html的文件,该文件将作为默认网页。如果需要设置其他名称的默认网页,可以将文件名更改为所需的名称。 以下是一个示例: src └── m…

    Java 2023年5月14日
    00
  • java8 Stream API之reduce使用说明

    Java8 Stream API之reduce使用说明 简介 reduce() 是 Stream API 的一个终端操作,它能够将 stream 中所有元素反复结合起来,得到一个最终值。 语法 Optional<T> reduce(BinaryOperator<T> accumulator); T reduce(T identity,…

    Java 2023年5月26日
    00
  • Java加密 消息摘要算法SHA实现详解

    Java 加密之消息摘要算法SHA256 实现详解 在这篇文章中,我们将详细介绍使用 SHA256 算法实现消息摘要的 Java 编程。本文将介绍什么是消息摘要算法、SHA256 算法的原理和用法,以及如何在 Java 中使用 SHA256 实现消息摘要。本文还提供了两个示例来演示如何使用 SHA256 算法。 什么是消息摘要算法? 消息摘要算法是简单的单向…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部