目录
一、目标
- SpringBoot构造并且返回一个json对象。(构建统一的接口返回格式)
- JackSon的基本使用演绎法。(基本知识:1.如何隐藏bean的字段,不返回给前端,如密码字段;2.如何指定日期字段的返回格式;3.为null的字段不返回,有值才返回如何做到)
二、构建接口返回json
1.创建基础bean对象
package com.example.springbootdemo.bean;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.Date;
public class User {
private String name;
private String passWord;
private Integer age;
private Date birthday;
private String desc;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", passWord='" + passWord + '\'' +
", age=" + age +
", birthday=" + birthday +
", desc='" + desc + '\'' +
'}';
}
}
代码结构:
2.编写controller
package com.example.springbootdemo.controller.user;
import com.example.springbootdemo.bean.User;
import com.example.springbootdemo.common.BaseResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@RestController //@RestController = @Controller+ @ResponseBody
@RequestMapping("/user")
public class UserController {
/**
* 这种直接返回实体不推荐,应该返回统一的封装格式
* @return
*/
@GetMapping("/get")
public User user(){
User user = new User();
user.setName("wzc");
user.setAge(30);
user.setBirthday(new Date());
user.setPassWord("wmhp");
return user;
}
}
3.启动项目,访问http://localhost:8080/user/get,返回结果为:
三、构建统一的接口返回格式
如上返回,不同bean的字段不一致,我们可以封装一个统一的返回体,比如接口是否成功的code标识,成功返回1,否则-1,返回的信息如错误的原因字段msg,返回的具体实体Object.
1.自定义返回体类
package com.example.springbootdemo.common;
public class BaseResult {
private String code;
private String msg;
private Object data;
public String getCode() {
return code;
}
public void setCode(String 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 BaseResult(String code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public static BaseResult success(Object t){
BaseResult baseResult = new BaseResult("0", "success", t);
return baseResult;
}
}
2.重写controller方法
package com.example.springbootdemo.controller.user;
import com.example.springbootdemo.bean.User;
import com.example.springbootdemo.common.BaseResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@RestController //@RestController = @Controller+ @ResponseBody
@RequestMapping("/user")
public class UserController {
/**
* 这种直接返回实体不推荐,应该返回统一的封装格式
* @return
*/
@GetMapping("/get")
public User user(){
User user = new User();
user.setName("wzc");
user.setAge(30);
user.setBirthday(new Date());
user.setPassWord("wmhp");
return user;
}
@GetMapping("/getUser")
public BaseResult getUser(){
User user = new User();
user.setName("wzc33");
user.setAge(30);
user.setBirthday(new Date());
user.setPassWord("wmhp2");
return BaseResult.success(user);
}
}
3.启动项目访问http://localhost:8080/user/getUser返回的结果为:
四、JackSon的基本使用演绎法
1、如何隐藏bean的字段,不返回给前端,如密码字段;
使用注解
@JsonIgnore private String passWord;
再次访问,返回的结果为:
2.如何指定日期字段的返回格式;
使用注解
@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss a", locale = "zh", timezone = "GTM+8") private Date birthday;
3.为null的字段不返回,有值才返回如何做到
使用注解
@JsonInclude(JsonInclude.Include.NON_NULL) private String desc;
可以看到desc不返回,当desc有值时是返回的。