广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBootRESTful风格入门讲解
  • 446
分享到

SpringBootRESTful风格入门讲解

SpringBootRESTfulSpringBootRESTful接口 2022-11-13 19:11:45 446人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1、Restful简介2、查询用户以及用户详情2.1常用注解2.2查询用户详情3、处理创建请求3.1@RequestBody注解3.1.1用途3.1.2语法规范3.2日期类型的处

1、Restful简介

Restful比较热门,,spring微服务是基于Restful风格搭建的框架

Restful有一下几个特点:

  • 使用URL描述资源。
  • 使用Http方法描述行为,使用HTTP状态码来表示不同的结果。
  • 使用JSON交互数据。
  • Restful只是一种风格,不是强制标准。

2、查询用户以及用户详情

最简单的,最常用的GET请求,用于查询全部数据或者其中一条数据的详情。

2.1常用注解

常用注解作用
@RestController表明此tController 提供的是Restful服务
@RequestMapping将URL映射到Java
@RequestParam映射请求参数到Java上的参数
@PageableDefault指定分页参数的默认值

2.2查询用户详情

@RequestMapping(value="/manage", method= {RequestMethod.GET})
	public String list(String userId,Map<String,Object> map) {
		if(userId==""||userId==null) {
			map.put("userList", userService.getUserList());
		}else {
			map.put("userList",userService.getUserById(Integer.parseInt(userId)));
		}
		return "user/list";
	}

3、处理创建请求

3.1@RequestBody注解

3.1.1用途

用于接收前端传递给后端的json字符串中的数据。(处理json格式的数据)

@RequestBody用来接收前端传递给后端的json字符串中的数据,GET方式的请求一般通过URL中携带key-value参数,而@RequestBody接收的是请求体中的数据(json格式的数据,只有请求体中能保存json),所以使用@RequestBody接收数据的时候必须是POST方式等方式。

@RequestBody与@RequestParam()可以同时使用,但@RequestBody最多只能有一个,而@RequestParam()可以多个。

3.1.2语法规范

(@RequestBody Map map)
(@RequestBody Object object)

(@RequestBody Map map)先对简单,将json解析成Map形式的key-value对,直接通过map.get(“KeyName”)就能拿到值了

(@RequestBody Object object) 通过json字符串中的key来匹配对应实体类的属性如果匹配一致且json中的该key对应的值符合实体类的对应属性的类型要求时,会调用实体类的setter方法将值注入到该属性。

例如

public Result deleteBookById(@RequestBody HashMap<String, String> map) {
        this.bookService.deleteBookById(Long.parseLong(map.get("id")));
        return Result.createWithSucceSSMessage();
    }
public Result updateBookById(@RequestBody Book book){
        Book record = this.bookService.updateBookById(book);
        return Result.createWithModel(record);
    }

注意:

在(@RequestBody Object object)中,前端POST过来的数据会通过反序列数据到实体类中,并且在反序列的过程中会进行类型的转换。

在json中应该用null来代表空值,如果是"“(空字符串)会判断为空串,如果实体类属性是String类型的,那么接受到的就是”",如果实现类属性类型是Integer、Double等类型,那么接收到的就是null。

{
	name:"",
	age:null
}

(@RequestBody Object object)内部是通过传递过来的数据中的Key寻找setter方法,有则调用,无则不作任何操作(其实可以设计)。

如果通过Key匹配到setter方法,但是Value无法转换为对应的实例类属性的类型时,抛出异常。

3.2日期类型的处理

前端传入日期格式: yyyy-MM-dd HH:mm:ss,例如:2018-07-09 12:55:12(不使用时间戳,前后双方联调时查看起来更加友好)

后端返回日期格式: yyyy-MM-dd HH:mm:ss,例如:2018-07-09 12:55:12(不使用时间戳,前后双方联调时查看起来更加友好)

后端json序列化、反序列化框架: 定义任何一种高效的json工具都行,例如:Fastjson、Gson、Jackson lib

序列化、反序列化日期格式规范: pattern=”yyyy-MM-dd HH:mm:ss”,timezone = “GMT+8”,除特出场景可以使用pattern=”yyyy-MM-dd”,timezone = “GMT+8”

不要随意自定义convert处理日期格式以及其他特殊格式转换,应该交由基础框架组或架构组统一在框架层面解决,对业务开发透明,或者在有些小公司由Leader或高开来担当。

3.3BindingResult

	
      @PostMapping("/user")
      public User create(@Valid @RequestBody User user, BindingResult result){
         if(result.hasErrors()){
             result.getAllErrors().stream().forEach(error -> {
                 FieldError fieldError = (FieldError)error;
                 String message = fieldError.getField() + " " + error.getDefaultMessage();
                 System.out.println(message);
             });
             return null;
         }
         System.out.println(user.toString());
         user.setId(5l);
         return user;
     }

4、用户信息修改与删除

PUT和DELETE并不复杂,大家也熟悉,用于对后台数据的更新和删除。

4.1用户信息修改

对资源更新的请求方法通常是是PUT,但有时候也可能是POST。那么问题来了,都是更新资源区别在哪里?

PUTPOST
在HTTP中PUT被定义为幂等的请求方法而POST则不是
操作是作用于一个具体资源之上作用于一个集合资源之上
URL在客户端确定使用PUTURL在服务端确定使用POST

比较直观的是资源URL的不同

4.2案例

前端界面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/Jquery.min.js"></script>
    <script>
        $(function () {
            // 查询所有
            $('#btn1').click(function () {
                $.get('/employees', function (data) {
                    console.log(data);
                });
            });
            // 查询一个
            $('#btn2').click(function () {
                $.get('/employees/10', function (data) {
                    console.log(data);
                });
            });
            // 添加
            $('#btn3').click(function () {
                $.post('/employees', "id=11", function (data) {
                    console.log(data);
                });
            });
            // 修改
            $('#btn4').click(function () {
                $.ajax({
                    url: "/employees",
                    type: "PUT",
                    data: {id: 1, name: "小肥羊", age: 10},
                    success: function (data) {
                        console.log(data);
                    }
                });
            });
            // 删除
            $('#btn5').click(function () {
                $.ajax({
                    url: "/employees/13",
                    type: "DELETE",
                    data: {id: 1},
                    success: function (data) {
                        console.log(data);
                    }
                });
            });

        });
    </script>
</head>
<body>
<button id="btn1">查询所有</button>
<button id="btn2">查询一个</button>
<button id="btn3">添加</button>
<button id="btn4">修改</button>
<button id="btn5">删除</button>
</body>
</html>

后端控制器

package com.yy.WEB.controller;
import com.yy.domain.Employee;
import com.yy.util.JsonResult;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;

@RestController
@RequestMapping("employees")
public class EmployeeController {
    
    // 查询所有(数据是模拟的)
//    @RequestMapping(value = "/employees", method = RequestMethod.GET)
    @GetMapping
    public List<Employee> list() {
        return Arrays.asList(new Employee(1L,"小肥羊", 10), new Employee(2L, "熊大", 11));
    }
    // 查询单个(数据是模拟的)
//    @RequestMapping(value = "/employees/{id}", method = RequestMethod.GET)
    @GetMapping("/{eid}")
    public Employee queryById(@PathVariable("eid") Long id) {
        System.out.println("查询单个 = " + id);
        return new Employee(3L, "熊二", 8);
    }
    // 添加(数据是模拟的)
//    @RequestMapping(value = "/employees", method = RequestMethod.POST)
    @PostMapping
    public Employee add(@ModelAttribute("employee") Employee employee) {
        System.out.println("添加 = " + employee.getId());
        return employee;
    }
    // 修改(数据是模拟的)
//    @RequestMapping(value = "/employees", method = RequestMethod.PUT)
    @PutMapping
    public Employee update(@ModelAttribute("employee") Employee employee) {
        System.out.println("修改 = " + employee.getId());
        employee.setId(employee.getId());
        employee.setName(employee.getName());
        employee.setAge(employee.getAge());
        return employee;
    }
    // 删除(数据是模拟的)
//    @RequestMapping(value = "/employees/{id}", method = RequestMethod.DELETE)
    @DeleteMapping("/{id}")
    public String delete(@PathVariable Long id) {
        System.out.println("删除 = " + id);
        if (id != null && 1 == id) {
            return "删除成功";
        }
        return "删除失败";
    }
}

到此这篇关于SpringBoot RESTful接口入门讲解的文章就介绍到这了,更多相关SpringBoot RESTful内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBootRESTful风格入门讲解

本文链接: https://www.lsjlt.com/news/171231.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBootRESTful风格入门讲解
    目录1、Restful简介2、查询用户以及用户详情2.1常用注解2.2查询用户详情3、处理创建请求3.1@RequestBody注解3.1.1用途3.1.2语法规范3.2日期类型的处...
    99+
    2022-11-13
    SpringBoot RESTful SpringBoot RESTful接口
  • SpringMVCREST风格深入详细讲解
    目录REST简介RESTful入门案例REST快速开发案例-基于RESTful页面数据交互REST简介 REST介绍 REST(Representational State Tran...
    99+
    2022-11-13
    SpringMVC REST风格 SpringMVC REST
  • Java JDBC使用入门讲解
    目录1、JDBC概述1.1、JDBC的概念1.2、JDBC的本质1.3、JDBC的好处2、JDBC快速入门2.1、编写代码2.2、完整案例前言:本节我们开始学习JDBC,JDBC的基...
    99+
    2022-12-08
    Java JDBC Java JDBC是什么
  • springboot与springmvc基础入门讲解
    目录一,SpringBoot–1,概述–2,用法二,SpringMVC–1,概述–2,原理–3,入门案例总结一,SpringBoot –1,概述 用来整合maven项目,可以和Sp...
    99+
    2022-11-12
  • Java之jpa入门教程讲解
    JPA快速入门介绍 一:什么是JPA JPA的英文全称是Java PersistenceAPI, 目的是给Java开发者提供对象关系映射工具用于在 Java应用程序开发中来管理关系数...
    99+
    2022-11-12
  • JDBC最详讲解(快速入门)
    作者简介:大家好我是小唐同学(๑>؂小唐同学(๑>؂...
    99+
    2023-09-04
    java 数据库 mysql
  • MySQL之索引(入门级讲解)
    目录 一.索引的概念   1.1索引的简介  1.2.索引的优缺点 二.MySQL索引语法 2.1查看索引 2.2创建索引 2.2.1 创建表时创建索引  2.2.2存在的表上创建索引 2.3删除索引 三.索引的数据结构       3.1...
    99+
    2023-08-31
    mysql 数据库
  • Scrapy简单入门及实例讲解
    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 A...
    99+
    2023-01-31
    实例 入门 简单
  • Java 泛型超详细入门讲解
    目录1、什么是泛型2、泛型是怎么编译的泛型的编译机制:擦除机制1、什么是泛型 泛型其实就是将类型作为参数传递,泛型允许程序员在编写代码时使用一些以后才指定的类型 ,在实例化该类时将想...
    99+
    2022-11-13
  • C++入门之模板基础讲解
    目录前言引入模板函数模板模板的匹配原则模板的显示调用类模板注意1注意2总结 前言 今天博主将要介绍的内容是–模板,他在C++中具有非常重要的位置.至于什么是模板呢?我们请看...
    99+
    2022-11-12
  • 基于SpringMVC入门案例及讲解
    目录一、SpringMvc概述二、入门案例 开发步骤1、创建web工程、引入依赖2、配置SpringMvc入口文件3、创建Springmvc.xml文件4、创建 业务处理器...
    99+
    2022-11-12
  • 计算机视觉-OpenCV入门讲解
    🎉作者简介:在读计算机研究生,目前研二。主要研究方向是人工智能和群智能算法方向。目前熟悉python网页爬虫、机器学习、计算机视觉(OpenCV)、群智能算法目前正在学习深度学习的...
    99+
    2023-08-31
    计算机视觉 opencv python
  • python计算机视觉OpenCV入门讲解
    目录前言一、什么是计算机视觉二、图片处理基础操作图片处理:读入图像图片处理:显示图像图片处理:图像保存三、图像处理入门基础图像成像原理介绍图像分类四、灰度图像五、彩色图像(RGB)六...
    99+
    2022-11-11
  • html form表单基础入门案例讲解
    目录一,表格标签–1,概述–2,总结二,表单标签–1,测试–2,总结–3,form提交数据三,form表单的练习四,CSS-1,概述-2,语法-3,入门案例五,选择器总结一,表格标签...
    99+
    2022-11-12
  • C++适用入门同学的模板讲解
    目录1. 泛型编程2. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.4.1显式实例化2.4.2 隐式实例化2.5 模板参数的匹配...
    99+
    2022-11-13
  • React组件化学习入门教程讲解
    目录模块化模块模块化组件化组件组件化函数式组件创建函数组件Props参数传递(重点)复合函数组件类式组件创建实例用户自定义组件模块化 模块 理解:向外提供特定功能的js程序,一般就是...
    99+
    2022-11-13
  • C语言结构体简单入门讲解
    结构体 定义:用于存储不同的数据类型,存储在同一块内存空间里面 关键字 struct 标签 结构体名称 成员 例如: struct student {...
    99+
    2022-11-12
  • 超详细的PHP入门知识点讲解
    目录 一、简介 二、php基本语法  二、变量和作用域 三、常量 四、数据类型 五、运算符 六、流程控制 七、超全局变量 一、简介 基础知识: 需要一定的html和css的语法知识 基本概念: PHP(超文本预处理器)是一种通用开源脚本...
    99+
    2023-09-25
    php 开发语言
  • Android入门之LinearLayout、AbsoluteLayout的用法实例讲解
    本文实例介绍了Android中LinearLayout、AbsoluteLayout的用法,希望能对于初学Android的朋友起到一点帮助作用。具体内容如下: Android ...
    99+
    2022-06-06
    Android
  • Go语言入门13之runtime包案例讲解
    目录Runtime包GOMAXPROCS()Gosched()Goexit()举个栗子Runtime包 GOMAXPROCS() ​ 用来设置可以并行计算的CPU核数最大值,并返回之...
    99+
    2023-05-18
    Go runtime包 Go runtime
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作