当前位置: 首页 > news >正文

SpringMVC系列(七)(Restful架构风格(下))(完结篇)

0 引言

作者正在学习SpringMVC相关内容,学到了一些知识,希望分享给需要短时间想要了解SpringMVC的读者朋友们,想用通俗的语言讲述其中的知识,希望与诸位共勉,共同进步!

本系列会持续更新!!可以放心食用!

ps:RestFul架构风格会分为上中下三篇来描述,名字分别为系列五-系列七,这三篇会同一时间发布!!!

1 Restful返回统一格式

在我们的本系列(六)中,介绍了业务代码中几个包的作用,但我们会发现controller包所返回的数值格式不是很统一,在企业中,需要返回统一格式:

code:业务的状态码,分成成功码和失败码,可以根据不同的状态码进行不同的处理

msg:服务端给前端返回的提示消息,描述此次操作的成功或者失败原因,例如返回"余额不足"。

data:服务器返回给前端的数据都放在这里面

{

        "code": XXX,

        "msg": XXX,

        "data":XXX}

按照上述要求,我们先建立一个R对象,来封装上述三个信息:

新建一个包Common,类名为R,代码如下:

import lombok.Data;@Data
public class R<T> {private Integer code;private String message;//因为可能会又各种数据,所以用Object类型private T data;public static <T> R<T> success(T object) {R<T> r = new R<T>();r.data = object;r.code = 200;//成功的状态码r.message = "操作成功";return r;}public static R success() {R r = new R<>();r.code = 200;//成功的状态码r.message = "操作成功";return r;}}

里面放入两个重载的success的方法,一个表示存在data返回,一个不存在data返回(读者也可以看情况给出error的方法,本篇就不再赘述)。所以Cotroller包下的方法也需要做出改造:

@RestController
@RequestMapping("/employee")
public class EmployeeRestController {@AutowiredEmployeeService employeeService;@GetMapping(value = "/{id}")public R<Employee> getEmployee(@PathVariable Long id) {Employee emp = employeeService.getEmp(id);return R.success(emp);}@DeleteMapping(value = "/{id}")public R deleteEmployee(@PathVariable Long id) {employeeService.deleteEmp(id);return R.success();}@PostMapping()public R saveEmployee(@RequestBody Employee employee) {employeeService.saveEmp(employee);return R.success();}@PutMapping()public R updateEmployee(@RequestBody Employee employee) {employeeService.updateEmp(employee);return R.success();}

我们就发现可以统一是返回R对象的这么一种格式,有返回数据的可以在返回值泛型中加上具体data的类型即可,如getEmployee方法所示。

拿getEmployee方法做一个测试:

网页显示:

2 跨域

研究这个问题之前首先我们先获得前端代码:
前端代码https://pan.baidu.com/s/1HUkez2KlFNXgHmtLUv8c8w?pwd=we7e 提取码: we7e 

需要将这个文件放置在纯英文以及没有空格的路径上,双击按钮及启动。

以及一个新方法,就是查看所有员工:

Controller包底下添加:

    @GetMapping("/employees")public R<List<Employee>> getEmployees() {return R.success(employeeService.getEmployees());}

service接口:

List<Employee> getEmployees();

service实现类:

    @Overridepublic List<Employee> getEmployees() {List<Employee> employees = employeeDao.getEmployees();return employees;}

Dao接口中:

List<Employee> getEmployees();

Dao实现类:

    @Overridepublic List<Employee> getEmployees() {String sql = "select * from employee";List<Employee> employees = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Employee.class));return employees;}

添加完毕,当我们真正进行前后端联调的时候可能还会出现跨源资源共享策略(CORS)的问题,当我启动前端页面http://localhost/:

刷新页面,可以看到方法查询的方法报错被阻止访问查询所有员工。也就是说游览器为了安全,默认会遵循同源策略(会限制ajax请求,图片,css以及js),即项目所在服务器和请求的服务器是同一个,如果不是请求会被拦截。

1)当前浏览器页面地址:http://localhost/

2)查看前端请求地址:http://localhost:8080/api/v1/employees

地址在“/”以前的必须完全一样,游览器才能把请求(ajax类型的请求)发出去!!!

跨域问题解决:

后端解决方法:允许前端跨域

原理:服务器给游览器的响应头中增加字段:Access-Control-Allow-Origin = *;

具体实现:SpringMVC框架下在Controller类头上加上注解@CrossOrigin即可.

最终展示:

界面可以看到数据库中的所有内容。

如果想直接看完整代码可以直接去这个地址:

lin/Restful_codehttps://gitee.com/lin2002wei/restful_code

参考:

P111-P113

113.RESTful - CRUD案例 - 跨域_哔哩哔哩_bilibili

http://www.lryc.cn/news/576389.html

相关文章:

  • SpringMVC系列(五)(响应实验以及Restful架构风格(上))
  • 微软人工智能证书AI-102 | 如何快速通过?
  • JavaScript---数组篇
  • 循环向python异步中增加task的几个方法
  • 【unity游戏开发——网络】网络协议、TCP vs UDP 本质区别
  • 卸载Modelsim/Qustasim方法
  • AngularJS Git 提交消息规范
  • Centos 8设置固定IP
  • Linux通过Crontab实现自启动
  • Grab×亚矩阵云手机:以“云端超级节点”重塑东南亚出行与数字生活生态
  • 第十节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 菜单管理(下)
  • docker部署后端服务的脚本
  • 深入详解:决策树算法的概念、原理、实现与应用场景
  • WHERE 子句中使用子查询:深度解析与最佳实践
  • 设计模式精讲 Day 16:迭代器模式(Iterator Pattern)
  • 如何解决电脑windows蓝屏问题
  • VScode使用usb转网口远程开发rk3588
  • 【龙泽科技】新能源汽车故障诊断仿真教学软件【吉利几何G6】
  • [Linux]从零开始的STM32MP157移植Ubuntu根文件系统教程
  • ubuntu-server 与 ubuntu-live-server 的区别 笔记250628
  • React环境搭建及语法简介
  • Word之空白页删除2
  • 利用GPU加速TensorFlow
  • python多线程详细讲解
  • 【21】C9800配置PSK认证的WLAN
  • 多表连接查询:语法、注意事项与最佳实践
  • 【linux】Vm虚拟机ubuntu的接口ip掉了
  • 电商返利APP架构设计:如何基于Spring Cloud构建高并发佣金结算系统
  • 鸿蒙5:其他布局容器
  • 什么是 PoS(权益证明)