SpringMVC之json数据传递
1.1 准备工作
1.1.1 导入lombok依赖(方便写实体类)
< dependency>
< groupId> org.projectlombok</ groupId>
< artifactId> lombok</ artifactId>
< version> 1.18.24</ version>
</ dependency>
1.1.2 导入mvc json的依赖
< dependency>
< groupId> com.fasterxml.jackson.core</ groupId>
< artifactId> jackson-databind</ artifactId>
< version> 2.13.2.1</ version>
</ dependency>
1.1.3 创建实体类
package com. entity ;
import lombok. AllArgsConstructor ;
import lombok. Data ;
import lombok. NoArgsConstructor ;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Users {
private Integer id;
private String yhm;
private String pwd;
}
1.2 后台返回json数据到前台
1.2.1 示例代码
package com. controller ;
import com. entity. Users ;
import org. springframework. stereotype. Controller ;
import org. springframework. web. bind. annotation. RequestMapping ;
import org. springframework. web. bind. annotation. ResponseBody ;
@Controller
public class JsonController {
@RequestMapping ( "json1" )
@ResponseBody
public Users json1 ( ) {
Users u= new Users ( 10 , "张三" , "123466" ) ;
return u;
}
}
1.2.2 代码分析
@RequestMapping("json1")是给方法json1配置一个访问地址
只要配置了@ResponseBody,无论你方法返回的是什么类型,都可以自动转换成json格式
1.2.3 代码运行截图
a 访问前
b 访问后
1.3 @RestController注解(@Controller+@ResponseBody)
1.3.1 示例代码
package com. controller ;
import com. entity. Users ;
import org. springframework. web. bind. annotation. RequestMapping ;
import org. springframework. web. bind. annotation. RestController ;
import java. util. ArrayList ;
import java. util. List ;
@RestController
public class JsonController {
@RequestMapping ( "json1" )
public List < Users > json ( ) {
List < Users > arr= new ArrayList ( ) ;
arr. add ( new Users ( 10 , "张三" , "zs123466" ) ) ;
arr. add ( new Users ( 20 , "李四" , "ls123466" ) ) ;
arr. add ( new Users ( 30 , "王五" , "ww123466" ) ) ;
return arr;
}
}
1.3.2 代码分析
@RestController和@Controller不能同时存在
@RestController是含有@Controller和@ResponseBody两者的结合体
通常是用于某一类中,表示该类中的全部方法的返回值都会自动转json格式
在前后端分离的项目中用的比较多
1.3.3 代码运行截图
a 访问前
b 访问后
1.4 带状态码的返回 ReponseEntity
1.4.1 带200状态码并把数据带回
a 示例代码
@RequestMapping ( "json4" )
public ResponseEntity < Users > json4 ( ) {
Users u= new Users ( 222 , "qqq" , "54647" ) ;
return ResponseEntity . ok ( u) ;
}
b 示例代码分析
ok方法代表访问成功,传入的参数就代表你成功后需要展示出来的数据
c 示例代码运行截图
1.4.2 带指定状态码,不返回数据
a 示例代码
@RequestMapping ( "json4" )
public ResponseEntity < Users > json4 ( ) {
Users u= new Users ( 222 , "qqq" , "54647" ) ;
return ResponseEntity . status ( HttpStatus . NOT_FOUND ) . build ( ) ;
}
b 示例代码分析
status方法里面可以添任意已经存在的方法状态码
build方法代表的是此次访问并不携带数据
c 示例代码运行截图
1.4.3 带指定状态码,返回数据
a 示例代码
@RequestMapping ( "json4" )
public ResponseEntity < Users > json4 ( ) {
Users u= new Users ( 222 , "qqq" , "54647" ) ;
return ResponseEntity . status ( HttpStatus . NOT_FOUND ) . body ( u) ;
}
b 示例代码分析
body方法可以把后台的一些数据返回给前台
c 示例代码运行截图
1.5 返回中文文本信息
1.5.1 示例代码
@RequestMapping ( value = "json3" , produces = "text/plain;charset=utf-8" )
public String json3 ( ) {
return "我喜欢学习SSM框架内容" ;
}
1.5.2 代码分析
produces = "text/plain;charset=utf-8"是为了解决前台显示时中文乱码的问题
因为在类外面加上了@RestController注解,所以在该方法前不用加上@ResponseBody注解
1.5.3 代码运行截图
1.6 前台传递json数据格式的数据到后台
1.6.1 示例代码
@RequestMapping ( "json5" )
public void json5 ( @RequestBody Users u) {
System . out. println ( "获取数据:" + u) ;
}
1.6.2 代码分析
@RequestBody可以确保前台传过来的json数据能被成功注入到Users实体类中
这里没有写@ResponseBody是因为类的外面书写了@RestController注解
1.6.3 代码运行截图
a 前台部分
b 后台运行结果截图