Boot JSON的返回和处理
注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue 发布时间:2019/6/26 15:11:51
在Web程序中,JSON数据格式由于其方便、简洁、通用性强,越来越受欢迎,被广泛应用于外部调用接口等领域。在Spring Boot中,也可以很方便的返回、处理JSON数据格式。
大家应该记得,之前的Hello World案例中,我们用到了“@RestController”这个注解,这个注解是2个注解的结合体:@ResponseBody和@Controller。在Spring 4之前的版本中,返回给用户JSON是需要一起用这2个注解的,而现在只需要这个注解,就可以返回JSON格式的字符串了。“@RestController”注解需要加在类申明的上面一行。
Spring Boot 对 JSON的解析,归根到底是Java对JSON的解析。目前,网上流行的Java解析JSON的库有好几种,详情点击这里查看。但我们最为推荐的还是阿里巴巴的FastJson,它没有其他依赖包,而且转换数据类型的速度是最快的。虽然它在2019、2022年曝出了漏洞,但只要使用1.2.83以上的版本,就不会出现问题。
Spring Boot 使用阿里巴巴的FastJson时,需要首先在pom.xml中添加依赖,这样IntelliJ IDEA 会自动帮助你从网上下载依赖包。pom.xml位置你还记得在哪吗?是的,它在项目的根目录,下图所示的“5”(点击图片可看大图):
在pom.xml的<dependencies>大节中,添加一个依赖项:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>
version是版本号,这里应用的是1.2.83版本,最新版本你可以去FastJson的GitHub主页去查看。依赖加好之后,会有“Import Changes”的选项,我们点击即可等待IntelliJ IDEA 下载依赖包。下载完之后我们在“MainRestController”类的头部,引用2个包:
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject;
接下来,我们就可以在方法里使用FastJson了,非常的方便。我们首先来使用将字符串转换为Json的功能,请看下面的代码:
@RequestMapping(value="/string2json",method= RequestMethod.GET) public String string2Json() { String sJsonStr="{\"水果名\": \"苹果\", \"形状\": \"近圆形\",\"常见度\": \"极高\",\"平均重量\": 100}"; JSONObject jsonResult = JSON.parseObject(sJsonStr); //将其转换为JSONObject对象 return jsonResult.toString(); //重新转换为字符串并返回 }
这里,我们专门设置了一个路径“string2json”,然后,我们定义了一个字符串变量“sJsonStr”,它是一个合法的Json字符串格式,但在Java里,它的数据类型仍然是字符串。我们将其转换为JSONObject对象,JSONObject是FastJson的一个类,专门用于处理Json格式的变量。这里,我们使用FastJson 的JSON类的 parseObject 静态方法,将“sJsonStr”转换为JSONObject 对象。最后,使用 JSONObject 类的toString方法,将其重新转换为字符串返回。如果我们访问“http://localhost:8080/jiaocheng/string2json”,就会看到返回结果:
{"水果名":"苹果","形状":"近圆形","常见度":"极高","平均重量":100}
你可能会觉得,这只是绕了一个圈子,那么,我们来做点有趣的事情。将方法体稍作修改:
String sJsonStr="{\"水果名\": \"苹果\", \"形状\": \"近圆形\",\"常见度\": \"极高\",\"平均重量\": 100}"; JSONObject jsonResult = JSON.parseObject(sJsonStr); String sFruitName=jsonResult.getString("水果名"); int nAvgWeight=jsonResult.getIntValue("平均重量"); return "名字:"+sFruitName+"<br />平均重量:"+nAvgWeight;
这样,我们就可以通过键的名字取得它的值。这极大方便了我们编程,同时也减小了出错的可能性。
但是需要注意的是,jsonResult.getString这个方法,无法取到嵌套结构中的值,如果“水果名”这时处于“水果属性”下面,那么,就需要先取“水果属性”的值,再用JSON.parseObject()方法,将其转换为JSON,然后再取“水果名”的值。
取JSON数据方便了,那么如何让编辑JSON数据更加方便呢?我们使用 Java 的 HashMap 来建立一个Map对象,当然,使用它们之前,你应该先导入相关依赖包(你也可以使用IntelliJ IDEA 的Alt+Enter快捷键,快速的导入依赖包):
import java.util.HashMap; import java.util.Map;
现在,我们把方法体的代码修改如下:
Map mapFruit = new HashMap(); //这里使用了Java的多态特性 mapFruit.put("水果名", "苹果"); //添加键和值 mapFruit.put("形状", "近圆形"); mapFruit.put("常见度", "极高"); mapFruit.put("平均重量",100); mapFruit.remove("常见度"); //删除键"常见度" JSONObject jsonResult = (JSONObject) JSON.toJSON(mapFruit); //将mapFruit转换为Object对象后,再强制转换成JSONObject对象 String sFruitName=jsonResult.getString("水果名"); int nAvgWeight=jsonResult.getIntValue("平均重量"); return "名字:"+sFruitName+"<br />平均重量:"+nAvgWeight+"<br />JSON数据:"+jsonResult.toString();
首先,我们申明了一个Map对象“mapFruit”,然后将其添加4个键和值,然后,我们演示了如何删除其中特定的键和值。我们再使用FastJson 中JSON类的“toJSON”静态方法,将“mapFruit”转换为Java的Object对象,然后我们通过在表达式前面加上“(JSONObject)”将这个Object对象强制转换成了 JSONObject 对象。我们访问“http://localhost:8080/jiaocheng/string2json”,就会看到返回结果:
名字:苹果 平均重量:100 JSON数据:{"水果名":"苹果","形状":"近圆形","平均重量":100}
本章节简要介绍了Spring Boot中JSON的处理和返回,在日常使用中,已经基本够用了。更多FastJson的使用,可以点击我们的Java教程中关于FastJson使用的详细介绍。
注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue 发布时间:2019/6/26 15:11:51