1. 响应
1.1 介绍
在上述的方法中,我们在测试的时候,统一给页面响应了一个简单的字符串 "OK"。 其实,我们也可以直接将一个实体对象,或者一个集合直接响应回去。
比如如下这样:
A. 响应字符串 OK
@RequestMapping("/simpleParam")
public String simpleParam( String name , Integer age){
System.out.println(name+" : "+age);
return "OK";
}
B. 响应实体对象
@RequestMapping("/getUser")
public User getUser(){
User user = new User();
user.setName("Tom");
user.setAge(10);
return user;
}
C. 返回集合数据
@RequestMapping("/list")
public List<User> list(){
User user = new User();
user.setName("Tom");
user.setAge(10);
List<User> userList = new ArrayList<>();
userList.add(user);
return userList;
}
那在服务端,我们直接响应了一个对象 或者 集合,那最终前端获取到的数据是什么样子的呢?我们可以测试一下,通过postman发送请求,测试效果如下:
我们响应的是一个java对象 或者 集合, 怎么最终返回的确实JSON格式的数据呢 ? 其实啊,这是 @ResponseBody 注解的作用。
1.2 @ResponseBody
- 名称:@ResponseBody
- 类型:方法注解、类注解
- 位置:SpringMVC控制器方法上/类上
- 作用:将当前方法返回值直接返回,如果是 实体/集合 转换为JSON返回
而我们的案例中,并没有直接使用 @ResponseBody,原因是因为我们使用的是 @RestController注解,该注解中已经封装了@ResponseBody注解,已经包含了@ResponseBody注解的作用,我们无需要额外添加。
1.3 统一响应结果
但是呢,我们发现,我们在上述所编写的这些个Controller的方法,返回值各种各样,没有任何的规范。如果我们开发一个大型项目也是这样,那整个项目将难以维护。那在真实的项目开发中是什么样子的呢?
在真实的项目开发中,无论是增删改查的那种方法,我们都会定义一个统一的返回结果,在这个返回结果中,包含一下信息:
A. 当前请求是成功,还是失败。
B. 当前给页面的提示信息。
C . 返回的数据。
对于上述的这些数据呢,我们一般都会定义在一个实体类Result中。 代码如下:
public class Result {
private Integer code;//响应码,1 代表成功; 0 代表失败
private String msg; //响应码 描述字符串
private Object data; //返回的数据
public Result() { }
public Result(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
//增删改 成功响应
public static Result success(){
return new Result(1,"success",null);
}
//查询 成功响应
public static Result success(Object data){
return new Result(1,"success",data);
}
//失败响应
public static Result error(String msg){
return new Result(0,msg,null);
}
}