SpringBoot学习之Json数据交互

二.Springboot+Thymeleaf 整合之前后端(文本)交互 springboot 与 thymeleaf 整合前后端(文本)交互 阅读详情

1. Json报文

SpringBoot 默认会使用 Json 作为响应报文格式。首先,我们创建一个 UserController 用于处理前端的 Web 请求。
定义一个简单的控制器,与通常返回 Url 的 Controller 不一样的是,login() 使用了 @ResponseBody 注解,它表示此接口响应为纯数据,不带任何界面展示,可以获得标准Json。

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

    @RequestMapping("/login")
    @ResponseBody
    public RespEntity login(@RequestBody ReqUser reqUser) {    //使用reqUser模型来接受,而不用User

        User user = new User();
        if(reqUser != null) {
            user.setName(reqUser.getName());
            user.setPassword(reqUser.getPassword());
        }

        return new RespEntity(RespCode.SUCCESS, user);    //返回的响应实体具体看下节
    }
}

对于上面的代码来说,还可以做进一步的优化,由于所有的 Restful 接口都只是返回数据,所以我们可以直接在类级别上添加 @ResponseBody 注解。而大多数情况下,@Controller 与 @ResponseBody 又会一起使用,所以我们使用 @RestController 注解来替换掉它们,从而更加简洁地实现功能。

2. 接口规范

对于每一家公司来说,都会定义自己的数据规范,一个统一且标准的数据规范对于系统维护来说是非常重要的,也在很在程度上提升了开发效率。

2.1 响应报文规范

接口响应至少需要告诉使用方三项信息:状态码、描述、数据。其中,数据不是每个接口必须的,如果只是一个简单修改的动作,可能就没有必须返回数据了。下面我们定义一个 RespEntity类来封装我们的响应报文model:

public class RespEntity {
    private int code;
    private String msg;
    private Object data;

    public RespEntity(RespCode respCode) {
        this.code = respCode.getCode();
        this.msg = respCode.getMsg();
    }

    public RespEntity(RespCode respCode, Object data) {
        this(respCode);
        this.data = data;
    }

    ...    
}

同时,定义一个枚举类来维护我们的状态码:

public enum RespCode {

    SUCCESS(0, "请求成功"),
    WARN(-1, "网络异常,请稍后重试");

    private int code;
    private String msg;

    RespCode(int code, String msg) {
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }
    public String getMsg() {
        return msg;
    }
}

这样,我们的响应数据规范已基本建立。

2.2 请求数据规范

响应报文格式我们已经定义好了,那么请求数据我们如何接收呢?
一般来说,请求与响应会使用相同的报文形式。如果响应为Json,那么请求也建议使用Json。
为登录请求添加输入参数,首先,需要我们定义好用户实体User类,直接在映射方法login() 使用该实体进行参数接收,并将接收到的参数直接返回,1.节代码已实现。
调出Postman,填写正确的Url,选择POST方式发送请求,选择Body,将 Content-Type 设置成 application/json,填入 Json 格式的请求数据,点击 Send 即可得到如下结果。

数据接收非常成功,但在上面的响应报文中,存在着了一个非常严重的问题,那就是用户的密码也随同用户信息一起返回给了客户端,显然这并不是一种正确的做法。
我们需要对其进行一次过滤,由于 SpringBoot 默认使用 Jackson 作为 Json 序列化工具,如果想要过滤掉响应中的某些字段,只需在过滤字段对应的 get 方法上加上 @JsonIgnore 注解即可。
但这样又会引发另外一个问题,那就是请求中的字段也被过滤掉了,对于这种问题,可以采用抽离请求参数模型的方式进行处理,即自定义一套参数接收的 Model,比如,接收用户登录的会使用 ReqUser 来进行参数接收,这样使得请求参数模型与数据库映射实体完全分离,在一定程度上提升了系统的安全性。替换成 Model 对象后(1.节的代码已经替换好了),我们就可以在数据库映射实体 User 上增加 @JsonIgnore 注解忽略该字段的序列化,而不影响请求参数的输入。

3. 参数校验

出于系统健壮性的考虑,我们需要对所有的参数进行必要性校验,如:登录请求时,如果没有用户名,程序应该立即驳回该请求。上面请求参数模型(Model)的抽象也使得我们对数据校验更加方便,当然主要还是依赖于 SpringBoot 的 Validate 功能的强大支持。

3.1. 简单参数校验

对于登录接口来说,用户名与密码都是必输的,那么我们现在为其添加上对应的参数校验,无需 if-else 判断,简单的几个注解就可以帮助我们完成所有的工作。

public class LoginController {

    @RequestMapping("/login")
    @ResponseBody
    public RespEntity login(@RequestBody @Valid ReqUser reqUser) {

    }
}
----
public class ReqUser {
    @NotBlank(message = "用户名不能为空")
    public String getName() {
        return name;
    }

    @NotBlank(message = "密码不能为空")
    public String getPassword() {
        return password;
    }
    ...
}

我们为请求参数的 Model 对象ReqUser 加上了 @Valid 注解,并在 Model 类中对需要校验字段的 get 方法上添加相应的校验注解。效果如下:

3.2. 复杂参数校验

  • 正则表达式校验
    如果用户的登录名为手机号,那么就需要对登录名的格式做进一步的校验,下面使用正则表达式来校验手机号的合法性。

    @NotBlank(message = "用户名不能为空")
    @Pattern(
        regexp = "1(([38]\\d)|(5[^4&&\\d])|(4[579])|(7[0135678]))\\d{8}",
        message = "手机号格式不合法"
    )
    public String getUsername() {
    return username;
    }
  • 自定义校验注解
    在系统使用过程中,有很多地方需要对手机号的格式进行校验,如:注册、验证码发送等。
    但校验手机号的正则表达式又过于复杂,如果多处编写,一旦运营商增加某个号段,对程序的维护人员来说就是一个噩耗。这时,可以使用自定义校验注解来代替这些常用的校验。

手机号校验注解 Phone:

@Constraint(validatedBy = PhoneValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Phone {

    String message() default "手机号格式不合法";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

}

手机号校验实现类 PhoneValidator:

public class PhoneValidator implements ConstraintValidator<Phone, String> {

    private Pattern pattern = Pattern.compile("1(([38]\\d)|(5[^4&&\\d])|(4[579])|(7[0135678]))\\d{8}");

    @Override
    public void initialize(Phone phone) {
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
        return pattern.matcher(value).matches();
    }
}

Model 上的使用:

@Phone
public String getUsername() {
    return username;
}

这样的话,如果因为某些不可抗拒因素导致校验规则的变动,只需要修改一处理即可,维护成本大大降低。

4. Xml 报文

大多数情况下,使用 Json 就可以满足我们的需求了,但仍然存在某些特定的场景需要使用到 XML 形式的报文,如:微信公众号开发。不过不用担心,切换成 XML 报文也只需要做轻微的改动,添加相关依赖如下:"com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.8.8"
然后就可以开始进行测试了,此处借助一个模拟 HTTP 请求工具(Postman)来协助我们测试该接口:

在上面的测试范例里,我们指定了 Accept 为 text/xml,这样 SpringBoot 就会返回 XML 形式的数据。

SpringBoot前后端的Json交互 前端利用ajax: var sData = { email: $("#exampleInputEmail1").val(), password: $("#exampleInputPassword1").val() }; $.ajax({ url: "/login", type: 'post', dataType: 'json... 阅读详情

相关推荐

SpringBoot实战 之 数据交互篇

1. 序 Spring Boot 非常适合 Web 应用开发,我们可以使用它轻松地建立一个 Web 服务。在Spring Boot入门 里面,我们已经使用其实现一个非常简单的接口,输出了 Hello World!下面我们模拟真实的场景来学习 SpringBoot 应用开发。 2. 数据格式 (Json) 在现实的项目场景中,前后分离已经成了 Web 开发的基调,全栈的时代已经逐渐远去,后端负

Q码记 4万+

解决后端post请求参数为空的问题

axios发送post请求时, Content-Type默认是application/json;charset=utf-8,当后端需要的形式为 application/x-www-form-urlencoded 或者multipart/form-data 时,值就为空。 常见的post请求数据格式: Content-Type: application/json : 请求体中的数据会以json字...

TE杨 1万+

基于SpringBoot与HTML的前后端分离电子商城项目实战

SpringBoot作为当前Java企业级开发中最主流的框架之一,凭借其“约定优于配置”的设计理念,极大简化了传统Spring应用的初始化和配置流程。它通过自动配置(Auto-Configuration)机制,根据项目依赖自动启用相应的配置,开发者无需手动编写大量XML或JavaConfig代码。例如,引入后,内嵌的Tomcat服务器会自动启动,并初始化MVC环境。上述代码是SpringBoot应用的入口,注解整合了配置类扫描、组件注入与自动配置三大功能。项目结构中,

weixin_42284380的博客 965

Spring Boot学习之Json数据交互

最近在弄监控主机项目,对javaweb又再努力学习。实际的项目场景中,前后分离几乎是所以项目的标配,全栈的时代的逐渐远去,后端负责业务逻辑处理,前端负责数据展示成了一种固定的开发模式。像thymeleaf这种东西没法实现前后端分离模板难学也只有写java的才用吧,还是用js模板引擎接受json好。 1. Json报文 SpringBoot 默认会使用 Json 作为响应报文格式。首先,我们创建...

x_san3的博客 260

SpringBoot学习之Json数据交互的方法

主要介绍了SpringBoot学习之Json数据交互的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

企业微信消息推送API实战:5步搞定可信IP与域名配置(含Python代码示例)

本文详细解析了企业微信消息推送API实战中的关键配置步骤,特别是可信IP与可信域名的配置流程。通过5个清晰步骤,结合Python代码示例,指导开发者快速完成安全通信链路搭建,避免常见错误,确保消息推送服务稳定可靠。

qsc9012345的博客 998

java后台转发实例_springboot前后台数据交互的示例代码

本文介绍了springboot前后台数据交互的示例代码,分享给大家,具体如下:1.在路径中传递数据,比如对某个数据的id:123前台发送:格式大致如下在路径中后台接收:后台接收数据后台接收结果2.查询字符串传递数据前台发送:前台使用Querystring发送数据后台接收:这里@RequestParm可以不写,在后台找不到前台对应的字段时,输出null,在@RequestParam中指定的编程客栈没...

weixin_36389909的博客 458

深入解析车载以太网DoIP诊断:Wireshark实战TCP/UDS报文分析

本文深入解析车载以太网DoIP诊断,重点介绍如何利用Wireshark进行TCP/UDS报文实战分析。文章详细讲解了从以太网帧、IP帧、TCP段到DoIP协议及UDS服务的逐层拆解方法,并提供了使用Wireshark定位通信故障(如乱序、丢包、重传)的实用技巧,帮助工程师高效排查车载诊断网络问题。

c2d3e4f的博客 677

详解 AJAX-SpringBoot 前后端数据交互

详解 AJAX-SpringBoot 前后端数据交互 1. Ajax 概述 Ajax 的英文全称是 ”Asynchronous JavaScript and XML“,即 ”异步的 JavaScript 和 XML“。其核心是通过 JavaScript 的 XMLHttpRequest 对象,以一种异步的方式,向服务器发送数据请求,并且通过该对象接收请求返回的数据,从而实现客户端与服务器端的数据交互。 优点:Ajax 能够刷新指定的页面区域(局部刷新),而不是刷新整个页面,从而减少客户端和服务器端之间的数

qq_41775769的博客 1万+

从按下开机键到进入系统:深入主板“后台”,揭秘Super I/O芯片的上电时序与BIOS交互

本文深入探讨了Super I/O芯片(SIO)在电脑启动过程中的关键作用,详细解析了其架构设计、上电时序与BIOS交互机制。通过分析SIO的多功能集成控制器特性,包括低速I/O管理、硬件监控和电源管理,揭示了从按下电源按钮到系统初始化的精密硬件协作过程。文章还提供了常见问题的调试方法,为硬件工程师和嵌入式开发者提供了实用参考。

weixin_27014595的博客 134

数字IC后端PPA优化实战:Timing一致性策略与Module Region布局技巧

本文深入探讨了数字IC后端设计中的PPA优化实战,重点解析了Timing一致性问题及其解决方案。通过调整Clock Uncertainty、Timing Derate和RC Scale Factor等关键参数,使Innovus等PR工具的分析结果更接近PrimeTime签核结果。同时,文章详细介绍了Module Region布局技巧,通过为关键模块划定物理区域,优化单元摆放,有效减少线延迟,从而协同提升时序收敛效率与设计可预测性。

weixin_29218963的博客 203

Android---SpringBoot实现前后端数据交互

Android—SpringBoot实现前后端数据交互 星光不问赶路人,时间不负有心人 这篇是针对android传数据到后台springboot,使用Xutils框架 使用Xutils框架 关于xutils的使用这是老师的博客大家可以看看 文章目录Android---SpringBoot实现前后端数据交互前端后端数据交互方式SpringBoot获取参数的几种常用注解`get请求``post请求`后台实体对象接收key-value接收map接收 前端后端数据交互方式 前端后端数据提交格式 Sprin

乐褀的博客 7727

基于 Quest 摄像头数据开发的原理介绍【Unity Meta Quest MR 开发教程】

比如想在识别到的现实物体上叠加虚拟物体,需要知道这个现实物体在 Unity 的世界坐标下的哪个位置,是带有 x,y,z 三个轴的数据的。而 WebCamTexture 捕捉到的图像只是个 2D 的平面,没有三维世界的深度信息,我们通过物体识别算法识别到的物体坐标只是在这个 2D 平面上的一个屏幕坐标,可以理解为 Quest 拍摄了一张照片,我们识别到这张照片上的某个像素点为需要识别的现实物体的中心。是不是看起来比较复杂?Quest 的相机访问功能是在安卓的。

qq_46044366的博客 2106

ajax传json给springboot,SpringBoot中前后端数据交互 json 格式

//前端使用jquery封装的ajax技术把封装好的json数据传输给后端//而在springboot项目中后端自动配置使用了google的jackson把传递给前端的数据自动转换为json格式,当然我们也可以不用默认,自定义设置$.ajax({url:"http://www.microsoft.com", //请求的url地址dataType:"json", //返回格式为jsonas...

weixin_39580124的博客 613

HX711重量传感器原理图设计,已量产(压力传感器)

最近调通了一款针对家用、物联网场景的重量传感套件,核心用了 HX711 这颗经典的称重 AD 芯片,还加了用户最需要的 “一键校准” 功能 —— 之前帮朋友做家用米桶余量报警时,用户总吐槽校准步骤太繁琐,这次的方案把操作简化到只按一个键,试下来体验好了不少。正好拆解下这套硬件的设计逻辑,供做同类产品的朋友参考。

不脱发的程序猿 375

世界职业院校技能大赛—人工智能赛道项目逐字稿参考十二

世界职业院校技能大赛—人工智能赛道项目逐字稿参考十二

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 149

SpringBoot系列(5):SpringBoot对JSON数据的处理

前言 JSON的可读性比XML强几条长安街,解析规则也简单许多。XML解析的时候规则太多了,动不动就非法字符,动不动就抛异常。这对追求高开发速度和低开发门槛的企业来说,是个致命伤。 在一个项目的各个接口间,及前后端之间数据的传输多使用 JSON格式的数据进行传输交互。而Spring Boot框架项目接口返回 JSON格式的数据比较简单:在 Controller 类中使用@RestControl...

应无所住而生其心 1万+

海思芯片OpenHarmony系统移植:Sensor传感器模块HDF驱动配置HCS文件详解

海思系列芯片的传感器模块通过HDF(Hardware Driver Foundation)驱动框架进行管理和配置。传感器HCS(HDF Configuration Source)配置文件定义了各类传感器的硬件参数、总线配置、寄存器序列等信息,为传感器驱动提供必要的初始化和运行参数。海思系列芯片适配OpenHarmony的传感器HDF配置HCS文件是传感器驱动开发的关键部分,通过合理配置可以实现各种传感器设备的驱动支持。

m0_67505153的博客 211

SpringBoot实现前后端数据交互、json数据交互、Controller接收参数的几种常用方式

现在大多数互联网项目都是采用前后端分离的方式开发,前端人员负责页面展示和数据获取,后端负责业务逻辑处理和接口封装。当与前端交互的过程当中,常用json数据与前端进行交互,这样想取出前端传送过来的json数据的时候,就需要用到@RequestBody这个注解。@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读...

拾一二的博客 6万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SpringBoot-Vue交互JSON数据交互后台数据收到为null问题解决

SpringBoot-Vue交互JSON数据交互后台数据收到为null问题解决 在做练习项目时遇到了一个让人郁闷的问题: 后台使用@RequestBody竟然收不到JSON数据 后台使用Swagger测试正常 前台使用console.log()测试数据也可以获得 于是乎就非常郁闷了,在掉了亿根头发之后终于发现了问题所在 //post请求的参数信息,data为传送json数据格式 data: { TeacherQuery } 没错这里能有什么问题呢? 看浏览器中NetW

千里之行,始于足下 1951

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringBoot Json数据交互

一、Json报文 SpringBoot默认会使用Json作为响应报文格式。 首先,我们创建一个UserController用于处理前端的Web请求。定义一个简单的控制器,与通常返回URL的Controller不一样的是,login()使用了@ResponseBody注解,它表示此接口响应为纯数据,不带任何界面展示,可以获得标准Json。 // 等同于SpringMVC @Controller 可以返回字符串跳转至jsp等页面 @Controller @RequestMapping("/user")

程序员博客 762

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SpringBoot 前后端json数据交互

一、参考文献 原生Ajax与JQuery Ajax SpringMVC接受JSON参数详解及常见错误总结 提交方式为 POST 时, JQuery Ajax 以 application/x-www-form-urlencoded 上传 JSON对象 , 后端用 @RequestParam 或者Servlet 获取参数。 JQuery Ajax 以 application/json 上传...

beidaol的专栏 2384

使用springboot搭建学习JSON

json介绍: https://www.bilibili.com/video/BV1Pt411u7R3?t=22) 1.json的概述 1、json(javaScript Object Notation,js 对象标记),是一种轻量级的数据交互格式,采用完全独立于编程语言的文本格式来存储和表示数据。 2、javascript 语言中,一切解释对象。 语言格式要求: (1) 对象表示为键值对,的数据之间用逗号隔开。 (2) {} 保存对象 (3) [] 保存数组 2.json .

Tiny~JJ的博客 1420
上一篇: springboot使用fastJson作为json解析框架
下一篇: SpringCloud踩坑实战笔记(入门篇)
liuyinfei_java
博客等级 码龄9年 71粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值