手机版

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

时间:2021-08-28 来源:互联网 编辑:宝哥软件园 浏览:

JSON知识的解释

JSON的定义

JSON是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机协会制定的js规范)的子集,使用完全独立于编程语言的文本格式来存储和表示数据。简单明了的层次结构使JSON成为一种理想的数据交换语言。便于人们读写,也便于机器分析和生成,可以有效提高网络传输效率。

解释来自百度百科,简单说一下。JSON是一串字符串,只是元素用特定的符号标记。

JSON的几种常见格式

目标

{ '用户名' : '一阵微风吹过我的心','密码' : '123456'}数组

['一','二','三'对象数组

{ '学生' : ['张三','李四','王五'],'教师' : ['语文','数学','英语']}数组对象

[{ '用户名' : '张三','年龄' : 18 ',{ '用户名' : '李四','年龄' : 20}]格式复杂

{'msg': '查询成功','代码' : 200,'数据' : { '省份' : [{ '姓名' : '重庆','城市' : [{ '姓名' : '重庆。区' : ['江北区','渝北区','万州区','合川区']} },{ '名称' : '北京','城市' : [{ '名称' : '北京','区

与XML相比,数据格式简单,易于读写,压缩,占用带宽少,便于服务器端解析,支持多种语言。包括C、C#、Java、JavaScript、Perl、php、Python、Ruby等等。以上就是JSON的全部内容。

最近在做监控主机项目,正在努力学习javaweb。在实际的项目场景中,前后分离几乎是所有项目的标准,全栈的时代已经逐渐远去,后端负责业务逻辑处理,前端负责数据显示,成为固定的开发模式。像百里香这样的东西是无法实现前后分离的。模板很难学习,只能由java作者使用。最好用json模板引擎接受JSON。

1.Json消息

默认情况下,SpringBoot使用Json作为响应消息格式。首先,我们创建一个用户控制器来处理前端的网络请求。

定义一个简单的controller,与通常返回Url的Controller不同,login()使用@ResponseBody注释,表示接口响应为纯数据,没有任何接口显示,可以获得标准的Json。

@ Controller @ request mapping(“/User”)公共类User Controller { @ request mapping(“/log in”)@响应体公共resp entity log in(@ request body reqUser reqUser){//接受使用req User模型而不是User User User=new User();if(reqUser!=null){ user . setname(requser . getname());user . setpassword(requser . getpassword());}返回新的RespEntity(RespCode。SUCCESS,用户);//返回的响应实体请参考以下部分。}}对于上面的代码,可以做进一步的优化。由于所有Restful接口只返回数据,我们可以直接在类级别添加@ResponseBody注释。大多数情况下,@Controller和@ResponseBody会一起使用,所以我们用@RestController标注来代替,这样实现功能更简洁。

2.接口规范

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

2.1响应消息规范

界面响应需要告诉用户至少三项信息:状态码、描述和数据。其中,数据不是每个接口都必须的。如果只是简单的修改,可能不需要返回数据。下面我们定义一个RespEntity类来封装我们的响应消息模型:

公共类RespEntity { private int code私有字符串消息;私有对象数据;public resp entity(resp code resp code){ this . code=resp code . getcode();this . msg=resp code . getmsg();}公共RespEntity(RespCode respCode,Object data){ this(resp code);this.data=数据;同时,定义一个枚举类来维护我们的状态代码:

公共枚举RespCode {SUCCESS(0,“请求成功”)、WARN(-1,“网络异常,请稍后再试”);私有int代码;私有字符串消息;RespCode(int code,String msg){ this . msg=msg;} public int getCode() {返回代码;} public String getMsg(){ return msg;}}这样,我们的响应数据规范就基本建立起来了。

2.2请求数据的说明

我们已经定义了响应消息的格式,那么我们如何接收请求的数据呢?

一般来说,请求和响应将使用相同的消息形式。如果响应是Json,也建议请求使用Json。

要在登录请求中添加输入参数,首先需要定义user实体User类,直接使用映射方法login()中的实体接收参数,并直接返回接收到的参数。1.部分代码已经实现。

调出POSTman,填写正确的Url,选择Post发送请求,选择Body,将Content-Type设置为application/json,以json格式填写请求数据,点击Send,得到如下结果。

数据接收非常成功,但是上面的响应消息中有一个非常严重的问题,就是用户的密码也是和用户信息一起返回给客户端的,这显然不是一个正确的方式。

我们需要过滤一次。因为SpringBoot默认使用Jackson作为Json序列化工具,所以如果想要过滤掉响应中的一些字段,只需要在过滤字段对应的get方法中添加@JsonIgnore注释即可。

但是,这将导致另一个问题,即请求中的字段被过滤掉。对于这个问题,我们可以使用拉离请求参数Model的方法,即我们可以定制一组参数接收模型。比如接收登录的用户会使用ReqUser接收参数,使得请求参数模型与数据库映射实体完全分离,一定程度上提高了系统的安全性。在用模型对象(第1节中的代码)替换它之后。已被替换),我们可以在数据库映射实体User上添加注释@JsonIgnore,以忽略此字段的序列化,而不影响请求参数的输入。

3.参数校准

为了系统的鲁棒性,我们需要检查所有参数的必要性。例如,如果登录时没有用户名,程序应该立即拒绝该请求。上述请求参数模型的抽象也使得我们验证数据更加方便,当然这主要依赖于SpringBoot的Validate函数的强大支持。

3.1.简单的参数校准

对于登录界面来说,用户名和密码都是必须的,所以现在我们给它添加了相应的参数验证,无需if-else判断,几个简单的标注就可以帮助我们完成所有的工作。

公共类LoginController { @ request mapping('/log in ')@ response body public response entity log in(@ RequestBody @ Valid ReqUser ReqUser){ }-公共类requser {@ notblank (message='用户名不能为空')公共字符串getname(){ return name;} @NotBlank(message=' password不能为空')公共字符串get password(){ return password;} .}我们向请求参数的Model对象ReqUser添加了@Valid注释,并向需要验证Model类中的字段的get方法添加了相应的验证注释。效果如下:

3.2.复杂参数的验证

正则表达式检查

如果用户的登录名是手机号,那么登录名的格式需要进一步验证。以下正则表达式用于验证手机号码的合法性。

@NotBlank(消息='用户名不能为空')@ pattern(regexp=' 1(([38]\ \ d)|(5[4 \ \ d])|(4[579])|(7[0135678])\ \。}自定义验证注释

在使用系统的过程中,有很多地方需要验证手机号码的格式,比如注册、验证码发送等。

然而,检查手机号码的正则表达式太复杂了。如果写在很多地方,一旦操作人员添加了某个数字段,对程序的维护人员来说就是一个坏消息。此时,您可以使用自定义检查注释来代替这些常用的检查。

手机号码验证备注电话:

@ Constraint(validatedBy=phone validator . class)@ Target({ element type。METHOD,element type . field })@ retention(retention policy . runtime)@ document public @ interface phone { string message()(默认)手机号码的格式非法;上课?[]group()默认为{ };上课?扩展有效负载[]有效负载()(默认为{ };}手机号码验证实现类PhoneValidator:

公共类PhoneValidator实现ConstraintValidatorPhone,string { private pattern=pattern.compile('1(([38]\\d)|(5[^4\\d])|(4[579])|(7[0135678]))\\d{8}');@ Override public void initialize(Phone Phone){ } @ Override public boolean is valid(字符串值,ConstraintValidatorContext ConstraintValidatorContext){ return pattern . matcher(值)。matches();在{ }型号上使用:

@ phone public String getUsername(){返回用户名;}在这种情况下,如果验证规则因为一些不可抗拒的因素发生变化,只需要进行一次修改,维护成本大大降低。

4.Xml消息

大部分情况下,Json可以满足我们的需求,但还是有一些具体场景需要用到XML消息,比如微信微信官方账号开发。不过不用担心,切换到XML消息只需要做细微的改动,相关的依赖项添加如下:‘com . fasterxml . Jackson . data format 3360 Jackson-data format-XML 33602 . 8 . 8’

然后我们就可以开始测试了。这里我们使用一个邮差HTTP我们测试接口:

在上面的测试示例中,我们将Accept指定为text/xml,这样SpringBoot将以xml形式返回数据。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:SpringBoot学习中的Json数据交互方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。