SpringBoot——SpringBoot中使用RESTful风格

简介: SpringBoot——SpringBoot中使用RESTful风格

文章目录:


1.一些新的注解

1.1 @RestController

1.2 @RequestMapping(常用)

1.3 @GetMapping

1.4 @PostMapping

1.5 @PutMapping

1.6 @DeleteMapping

1.7 @PathVariable

2.SpringBoot实现RESTful风格

2.1 实例代码

2.2 GET请求方式

2.3 DELETE请求方式

2.4 POST请求方式

2.5 PUT请求方式

3.RESTful风格中请求冲突的问题

1.一些新的注解


1.1 @RestController

@RestControllerSpring 4 后新增注解,是@Controller注解功能的增强,是 @Controller @ResponseBody 的组合注解。

如果一个 Controller 类添加了@RestController,那么该Controller 类下的所有方法都相当于添加了@ResponseBody 注解,用于返回字符串或 json 数据。


1.2 @RequestMapping(常用)

 支持 Get 请求,也支持Post 请求


1.3 @GetMapping

@RequestMapping Get 请求方法的组合,只支持Get 请求,Get 请求主要用于查询操作。


1.4 @PostMapping

@RequestMapping Post 请求方法的组合,只支持 Post 请求,Post 请求主要用户新增数据。


1.5 @PutMapping

@RequestMapping Put 请求方法的组合,只支持Put 请求,Put 通常用于修改数据。


1.6 @DeleteMapping

@RequestMapping Delete 请求方法的组合,只支持 Delete 请求,通常用于删除数据。


1.7 @PathVariable

获取 url 中的数据,该注解是实现RESTful最主要的一个注解。

2.SpringBoot实现RESTful风格


REST (英文:Representational State Transfer ,简称REST

一种互联网软件架构设计的风格,但它并不是标准,它只是提出了一组客户端和服务器交互时的架构理念和设计原则,基于这种理念和原则设计的接口可以更简洁,更有层次,REST这个词,是 Roy Thomas Fielding 在他2000 年的博士论文中提出的。

任何的技术都可以实现这种理念,如果一个架构符合 REST 原则,就称它为 RESTFul 架构。

比如我们要访问一个 http 接口:http://localhost:8080/springboot/order?id=1021&status=1

采用 RESTFul 风格则 http 地址为:http://localhost:8080/springboot/order/1021/1


2.1 实例代码

首先是一个实体类

package com.songzihao.springboot.entity;
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    //getter and setter
}

然后是我们的控制层

package com.songzihao.springboot.controller;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
 *
 */
@RestController //相当于是 @Controller 与 @ResponseBody 的组合注解,意味着当前控制层类中的所有方法返回的都是Json对象
public class StudentController {
    @GetMapping(value = "/student/{id}/{age}")
    public Object student(@PathVariable("id") Integer id,
                          @PathVariable("age") Integer age) {
        Map<String,Object> map=new HashMap<>();
        map.put("id",id);
        map.put("age",age);
        return map;
    }
    @DeleteMapping(value = "/student/detail/{id}/{status}")
    public Object student2(@PathVariable("id") Integer id,
                           @PathVariable("status") Integer status) {
        Map<String,Object> map=new HashMap<>();
        map.put("id",id);
        map.put("status",status);
        return map;
    }
    @DeleteMapping(value = "/student/{id}/detail/{phone}")
    public Object student3(@PathVariable("id") Integer id,
                           @PathVariable("phone") Integer phone) {
        Map<String,Object> map=new HashMap<>();
        map.put("id",id);
        map.put("phone",phone);
        return map;
    }
    @PostMapping(value = "/student/{id}")
    public String addStudent(@PathVariable("id") Integer id) {
        return "add student ID: " + id;
    }
    @PutMapping(value = "/student/{id}")
    public String updateStudent(@PathVariable("id") Integer id) {
        return "update student ID: " + id;
    }
}

接下来是springboot的核心配置文件

  server.port=8082
 server.servlet.context-path=/springboot

最后通过springboot项目入口类启动

package com.songzihao.springboot;
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);
    }
}

由于请求方式的不同(有GETPOSTPUTDELETE),这里我使用Postman工具来模拟发送请求,查看测试结果。


2.2 GET请求方式

2.3 DELETE请求方式

2.4 POST请求方式

2.5 PUT请求方式

3.RESTful风格中请求冲突的问题


对于下面这两段代码,就会出现请求冲突的问题。

    @DeleteMapping(value = "/student/detail/{id}/{status}")
    public Object student2(@PathVariable("id") Integer id,
                           @PathVariable("status") Integer status) {
        Map<String,Object> map=new HashMap<>();
        map.put("id",id);
        map.put("status",status);
        return map;
    }
    @DeleteMapping(value = "/student/detail/{id}/{phone}")
    public Object student2(@PathVariable("id") Integer id,
                           @PathVariable("phone") Integer phone) {
        Map<String,Object> map=new HashMap<>();
        map.put("id",id);
        map.put("phone",phone);
        return map;
    }

因为当我们发起请求之后,服务器并不知道这个地址 http://localhost:8082/springboot/student/1001/666 对应的是那个方法

解决的方法有两个:

1.    修改路径。(见下面的代码)

2.    修改请求方式。(这个意思是说,将请求方式由DELETE改为其他三种,所以就不再举例了)

    @DeleteMapping(value = "/student/detail/{id}/{status}")
    public Object student2(@PathVariable("id") Integer id,
                           @PathVariable("status") Integer status) {
        Map<String,Object> map=new HashMap<>();
        map.put("id",id);
        map.put("status",status);
        return map;
    }

    @DeleteMapping(value = "/student/{phone}/detail/{id}")
    public Object student3(@PathVariable("id") Integer id,
                           @PathVariable("phone") Integer phone) {
        Map<String,Object> map=new HashMap<>();
        map.put("id",id);
        map.put("phone",phone);
        return map;
    }

相关文章
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
42 4
|
1月前
|
Java API 数据库
如何使用Spring Boot构建RESTful API,以在线图书管理系统为例
【10月更文挑战第9天】本文介绍了如何使用Spring Boot构建RESTful API,以在线图书管理系统为例,从项目搭建、实体类定义、数据访问层创建、业务逻辑处理到RESTful API的实现,详细展示了每个步骤。通过Spring Boot的简洁配置和强大功能,开发者可以高效地开发出功能完备、易于维护的Web应用。
56 3
|
2月前
|
Java 网络架构 Spring
springboot中restful风格请求的使用
本文介绍了在Spring Boot中如何使用RESTful风格的请求,包括创建HTML表单页面、在application.yaml配置文件中开启REST表单支持、编写Controller层及对应映射处理,并进行服务启动和访问测试。HTML表单默认只支持GET和POST请求,因此对于DELETE和PUT请求,需要使用隐藏域`_method`来支持。
springboot中restful风格请求的使用
|
2月前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
74 2
|
3月前
|
Java API 数据库
【神操作!】Spring Boot打造RESTful API:从零到英雄,只需这几步,让你的Web应用瞬间飞起来!
【8月更文挑战第12天】构建RESTful API是现代Web开发的关键技术之一。Spring Boot因其实现简便且功能强大而深受开发者喜爱。本文以在线图书管理系统为例,展示了如何利用Spring Boot快速构建RESTful API。从项目初始化、实体定义到业务逻辑处理和服务接口实现,一步步引导读者完成API的搭建。通过集成JPA进行数据库操作,以及使用控制器类暴露HTTP端点,最终实现了书籍信息的增删查改功能。此过程不仅高效直观,而且易于维护和扩展。
55 1
|
4月前
|
Java API 数据库
使用Spring Boot构建RESTful API
使用Spring Boot构建RESTful API
|
4月前
|
开发框架 Java API
使用Spring Boot构建RESTful API的最佳实践
使用Spring Boot构建RESTful API的最佳实践
|
4月前
|
Java API Spring
Spring Boot中的RESTful API版本控制
Spring Boot中的RESTful API版本控制
|
JSON 缓存 JavaScript
SpringBoot学习笔记(五、Restful与json)
SpringBoot学习笔记(五、Restful与json)
209 0
SpringBoot学习笔记(五、Restful与json)
|
7天前
|
SQL 缓存 测试技术
构建高性能RESTful API:最佳实践与避坑指南###
—— 本文深入探讨了构建高性能RESTful API的关键技术要点,从设计原则、状态码使用、版本控制到安全性考虑,旨在为开发者提供一套全面的最佳实践框架。通过避免常见的设计陷阱,本文将指导你如何优化API性能,提升用户体验,确保系统的稳定性和可扩展性。 ###
39 12