由于我现在写的项目都是前后端分离的,前端用的是vue,后端springboot,于是前后端传值的问题就是一个比较重要的问题,为此我还特意去学了一下vue的传值,其实就是用一个axios组件,其实就是基于promise对ajax的封装,用法和ajax几乎一样,有兴趣的可以学学vue;

一般而言这种前后端分离的情况,前后端数据交互用的是json传递,而在spring中已经有两个注解定义好了,可以直接使用@RequestBody和@ResponseBody;

 温馨提示,以下代码默认你已经会使用swagger框架,lombok注解

1. RequestBody注解

看名字这个注解就是和请求有关的,而事实也确实如此,@RequestBody注解的作用是将前端传过来的json字符串转换成java对象,用法如下:

  你们可以不用实现InitializingBean,这个接口是我测试其他东西用到的

@RestController
@Api(value="测试校验注解controller",tags="测试校验注解controller")
@Slf4j
public class TestController implements InitializingBean{
// 测试数据库数据
@PostMapping("/hello")
@ApiOperation(value = "传入对象校验", notes = "传入对象校验")
public User hello(@RequestBody @Valid User user) { System.out.println(user);
return user;
}
}
@Data
@Accessors(chain=true)
public class User { @NotBlank
@Size(max=3,message="名字最多只能是3位")
private String name; @NotBlank
private String age;
}

相信大家对上面代码很熟悉了,其中在方法hello方法的参数中,我们用了@RequestBody注解修饰user对象,这个时候从前端传过来的json字符串就被映射到user中,我顺便用了一下@Valid注解校验传值是否非空,我们可以用这个很简单的判断user对象有没有接收到;

打开swagger的ui界面,就是项目启动的  ip:端口/swagger-ui.html

  

  然后点击try it out,可以看到结果:

  后端也收到了数据:

  

  到这里一切是如此美好,然后突然有的时候前端抽风或者是当你接收一些奇葩项目的时候,前端传值首字母大写,你会怎么样?有人说这很简单啊,我只需要把后端对应的User中对应的字段也改一下啊,我们看看结果:

        

  

  测试结果如下,这里我有个校验的全局异常处理器做了处理;这个时候说明后端Name字段接收数据失败,这是个大坑,项目中把我坑了好半天。。

  解决办法一:让前端变量命名用驼峰,即首字母小写,那么后端字段只需要跟前端一样就可以了;

  

  解决办法二:后端在接收变量的该字段中添加注解:

  测试结果:

2. ResponseBody注解

  顺便讲一下这个注解,这个注解顾名思义,就是将java对象以自动转化为json字符串的形式返回给前端,我们可以在每一个方法上加一个这个注解,但是常用的做法就是在Controller上使用RestController注解,那么我们直接在方法中返回对象就好了,不用手动的转成json然后再传

  其实这两个注解@RequestBody和@ResponseBody 原理上都差不多,其实很简单,用到一个转换器HttpMessageConverter ,将Http请求体中的json取到,然后用开源的Jason进行转换成java对象,后面有时间可以分析一下源码

反思

  由于现在大多都是前后端分离的,虽然使得后端程序员不需要再去关注页面的逻辑了,这也极大的减轻了后端的压力,将压力前移了,但是这也造成了一些问题,就是前后端要进行频繁的联调,这也说明了接口文档的重要性,项目初期定义好接口文档真的可以省下很多功夫,避免后期频繁调整;

  其实吧,有时间学一下前端的内容还是很有意思的,最近在学vue,才知道es6。。(҂ ˘ _ ˘ ),不过用es6很舒服,类似java中类的用法

  还有就是字段的命名规则,求求你了,用驼峰吧!!!

springboot传值踩坑的更多相关文章

  1. CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记

    CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记 cas服务器的搭建 导出证书(1和2步骤是找了课程,随便写了一下存记录,不过对于自己测试不投入使用应该不影响) C:\Users\D ...

  2. Spring-Boot + MyBatis-Plus 踩坑记录

    这两天在学SpringBoot+MyBatis的开发,配置开发环境和DEMO的过程中踩了很多坑,在这里记录一下. 我的开发环境是idea + JDK 1.8.0.211. 首先展示一下demo的项目整 ...

  3. 微信小程序踩坑集合

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...

  4. SpringBoot + Shiro + shiro.ini 的踩坑记录

    0.写在前面的话 好久没写博客了,诶,好多时候偷懒直接就抓网上的资料丢笔记里了,也就没有自己提炼,偷懒偷懒.然后最近参加了一个网络课程,要交作业的那种,为了能方便看下其他同学的作业,就写了个爬虫把作业 ...

  5. SpringBoot+SpringSecurity+Thymeleaf认证失败返回错误信息踩坑记录

    Spring boot +Spring Security + Thymeleaf认证失败返回错误信息踩坑记录 步入8102年,现在企业开发追求快速,Springboot以多种优秀特性引领潮流,在众多使 ...

  6. 新人踩坑的一天——springboot注入mapper时出现java.lang.NullPointerException: null

    来公司的第二周接到了定时任务的开发需求:每天早上十点发送用户报表邮件 .校招新人菜鸟没做过这玩意有些懵(尴尬)于是决定分步写,从excel导出->邮件发送->定时器实现->mappe ...

  7. [原创]SpringBoot上传图片踩的坑

    最近项目里面有个需求,要上传图片到阿里云的OSS服务.所以需要写个上传图片的接口给前端. 这个简单的接口本来就给分配了1个工时,感觉也蛮简单的.但编码过程中遇到了好几个问题,现在一一记录下来,避免再次 ...

  8. spring-boot-starter-amqp踩坑记

    踩坑记录 近日在用spring boot架构一个微服务框架,服务发现与治理.发布REST接口各种轻松惬意.但是服务当设计MQ入口时,就发现遇到无数地雷,现在整理成下文,供各路大侠围观与嘲笑. 版本 当 ...

  9. linux上安装redis的踩坑过程

    redis用处很广泛,我不再啰嗦了,我按照网上教程想在linux上安装下,开始了踩坑过程,网上买了一个linux centos7.3,滴滴云的,巨坑无比啊,不建议大家用这家的! redis 为4.0, ...

随机推荐

  1. 严格次短路的求法-spfa

    #include<iostream> #include<cstdio> #include<algorithm> #include<queue> #inc ...

  2. SpringBoot整合邮件发送

    本节介绍SpringBoot项目如何快速配置和发送邮件,包括简单的邮件配置.发送简单邮件.发送HTML邮件.发送携带附件的邮件等. 示例源码在:https://github.com/laolunsi/ ...

  3. Spring AOP简介与底层实现机制——动态代理

    AOP简介 AOP (Aspect Oriented Programing) 称为:面向切面编程,它是一种编程思想.AOP 是 OOP(面向对象编程 Object Oriented Programmi ...

  4. 带你从头到尾捋一遍MySQL索引结构(2)

    前言 Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结.索性这次把数据库中最核心的也是最难搞懂的内容,也就是索引,分享给大家. 这篇博客我会谈谈对于索引结构我自己的看法,以 ...

  5. ES6中export default与export的区别

    1.export default 和export都可以用于导出常量,函数,文件,模块等: 2.可以在模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使 ...

  6. ES7中的async 和 await

    async 和 await 一个函数如果加上 async ,那么该函数就会返回一个 Promise async function test() { return "1" } con ...

  7. prometheus动态刷新rule

    Prometheus的target是支持动态更新的,例如通过file_sd_configs配置将target放置到yaml文件中,当yaml文件中的内容发生变化时,Prometheus会自动更新自身的 ...

  8. Asp.Net MVC中Aplayer.js音乐播放器的使用

    1.前言: Aplater.js是一款可爱.漂亮的Js音乐播放器,以前就了解过也弄过一些,现在就用mp3的格式来在.Net里面开发.管网 https://aplayer.js.org/ 2.入手: 在 ...

  9. mybatis初级映射

    一 前言 系统学习知识请认准知识追寻者(同公众号),错过作者,你有可能要走好多弯路 经过第一篇的入门文章,小白们都对mybatis的搭建流程应该都很熟悉,这篇文章主讲的是如何使用mybatis实现数据 ...

  10. 图文结合深入理解JS中的this值

    文章目录 Js 中奇妙的this值 1. 初探this 2. this指向总结 2.1 普通函数调用 2.2 对象的方法调用 2.3 构造函数调用 2.4 利用call,apply,bind方法调用函 ...