Spring Boot
返回JSON
的方式
Spring Boot
返回Json
的方式有好几种,比如:
1.使用响应Response
的方式像终端写数据
2.直接将数据封装为Json
的字符串方式返回
3.直接将对象返回
一、以Response
形式写Json
数据
首先我们先创建一个User
类,用来放我们要返回的数据。
package online.yangcloud.model;
public class User {
private String username;
private String password;
}
我们的这个User
类里就两个字段,一个用户名username
,一个密码password
,这里我就不进行加密了,只是将数据展示一下。这里注意一点,实体类别忘加getter
和setter
方法。
实体类创建好了之后,我们创建一个controller
,用于编写我们的接口
@RestController
@RequestMapping("/json")
public class JsonController {
}
可以看到,我创建了一个JsonController
,我们本篇文章编写的接口,就要都写在这里面。
那么,我们可以先编写第一个接口,用Response
响应向请求端写入数据的方式去返回Json
。
@GetMapping("/response")
public void writeResponse(HttpServletResponse response) throws IOException {
User user = new User();
user.setUsername("zhangsan");
user.setPassword("123456");
response.getWriter().write(JSONUtil.toJsonStr(user));
}
我们用GetMapping()
的方式,去声明了一个接口,接口的请求方式为get
方式。同时,参数是HttpServletResponse
,由于我们没有任务的业务,所以只需要这一个参数即可。
接着就用到我们上面创建的实体类User
了,我们给了一个人的信息,姓名叫“张三”,密码是”123456“。
用response
进行返回的话,要先获取到PrintWriter
,然后再用PrintWriter
写数据。那么这个getWriter()
方法,返回的就是一个PrintWriter
。
那么,有了PrintWriter
后,我们就可以调用write()
方法去写数据了。
可以看到,write()
方法有5种,这里我们用第二种,也就是将字符串传进去即可。同时,小伙伴注意到了么,5个方法的返回值都是void
,这就是为什么我们在定义接口的时候,也是用void
去定义的返回值。至于JSONUtil.toJsonStr()
这段,是因为我使用了Hutool
工具,将类转为JSON
字符串。
那么,我们可以启动起来,看一下效果。
那么结果,也可以看到了,我们通过浏览器访问接口,成功将返回值打印出来。不过小伙伴们可能看到的效果和我的不太一样,我安装了一个浏览器的插件,叫JSONVue
,是将Json
格式化后打印出来的。
二、以字符串形式返回Json
数据
接下来,我们来说第二种方式。
其实,这种方式与第一种方式大同小异,只不过是将字符串直接返回,而不是通过Response
了而已。
我们直接编写接口
@GetMapping("/string")
public String returnString() {
User user = new User();
user.setUsername("lisi");
user.setPassword("1");
return JSONUtil.toJsonStr(user);
}
这里只简单说一下与上一种方式的区别。
1.不需要将Response
当做入参。
2.需要将方法的返回值定义为String
类型。
3.方法直接return
字符串
其他的不需要多说什么了。直接看效果。
可以看到,这种方式,我们也通过浏览器访问接口,接收到了数据。
三、以对象形式返回Json
数据
这一种方式呢,跟第二种差不多。只不过,第二种是返回String
类型,这种是返回Object
类型。为什么是Object
类型呢,因为你不能确定返回的数据是什么类型的,所以直接用所有类的顶类Object
类来定义就可以了。那么既然返回值可以是任意一种类型的话,我们也就没有必要将实体类转为字符串,再返回了,可以直接返回了。
接口内容改为这样。
@GetMapping("/obj")
public Object returnObj() {
User user = new User();
user.setUsername("wangwu");
user.setPassword("2");
return user;
}
这里不多做解释,上面都已经解释完了。
直接看效果;
同样,数据接收到了,没有问题。
那么,到这里,本篇文章也就结束了。
未完待续~~