版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/83932729
一 实体类
1 User
package com.imooc.pojo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
public class User {
private String name;
//忽略该字段
@JsonIgnore
private String password;
private Integer age;
//格式化时间
@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss a", locale="zh", timezone="GMT+8")
private Date birthday;
//如果该字段为空就不显示
@JsonInclude(Include.NON_NULL)
private String desc;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
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;
}
}
2 IMoocJSONResult
package com.imooc.pojo;
import java.util.List;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
*
* @Title: IMoocJSONResult.java
* @Description: 自定义响应数据结构,将JSON数据封装到一个对象中
* 这个类是提供给门户,ios,安卓,微信商城用的
* 门户接受此类数据后需要使用本类的方法转换成对于的数据类型格式(类,或者list)
* 其他自行处理
* 200:表示成功
* 500:表示错误,错误信息在msg字段中
* 501:bean验证错误,不管多少个错误都以map形式返回
* 502:拦截器拦截到用户token出错
* 555:异常抛出信息
*/
public class IMoocJSONResult {
// 定义jackson对象
private static final ObjectMapper MAPPER = new ObjectMapper();
// 响应业务状态
private Integer status;
// 响应消息
private String msg;
// 响应中的数据
private Object data;
private String ok;
public static IMoocJSONResult build(Integer status, String msg, Object data) {
return new IMoocJSONResult(status, msg, data); //3个参数
}
public static IMoocJSONResult ok(Object data) {
return new IMoocJSONResult(data); //1个参数
}
public static IMoocJSONResult ok() {
return new IMoocJSONResult(null); //data为空进行构造
}
public static IMoocJSONResult errorMsg(String msg) {
return new IMoocJSONResult(500, msg, null); //500:表示错误,错误信息在msg字段中
}
public static IMoocJSONResult errorMap(Object data) {
return new IMoocJSONResult(501, "error", data); //501:bean验证错误
}
public static IMoocJSONResult errorTokenMsg(String msg) {
return new IMoocJSONResult(502, msg, null); //502:拦截器拦截到用户token出错
}
public static IMoocJSONResult errorException(String msg) {
return new IMoocJSONResult(555, msg, null); //555:异常抛出信息
}
public IMoocJSONResult() {
}
//3参构造函数
public IMoocJSONResult(Integer status, String msg, Object data) {
this.status = status;
this.msg = msg;
this.data = data;
}
//1参构造函数
public IMoocJSONResult(Object data) {
this.status = 200;
this.msg = "OK";
this.data = data;
}
public Boolean isOK() {
return this.status == 200;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
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;
}
/**
*
* @Description: 将json结果集转化为LeeJSONResult对象
* 需要转换的对象是一个类
* @param jsonData
* @param clazz
* @return
*/
public static IMoocJSONResult formatToPojo(String jsonData, Class<?> clazz) {
try {
if (clazz == null) {
return MAPPER.readValue(jsonData, IMoocJSONResult.class);
}
JsonNode jsonNode = MAPPER.readTree(jsonData);
JsonNode data = jsonNode.get("data");
Object obj = null;
if (clazz != null) {
if (data.isObject()) {
obj = MAPPER.readValue(data.traverse(), clazz);
} else if (data.isTextual()) {
obj = MAPPER.readValue(data.asText(), clazz);
}
}
return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
} catch (Exception e) {
return null;
}
}
/**
*
* @Description: 没有object对象的转化
* @param json
* @return
*/
public static IMoocJSONResult format(String json) {
try {
return MAPPER.readValue(json, IMoocJSONResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
*
* @Description: Object是集合转化
* 需要转换的对象是一个list
* @param jsonData
* @param clazz
* @return
*
*/
public static IMoocJSONResult formatToList(String jsonData, Class<?> clazz) {
try {
JsonNode jsonNode = MAPPER.readTree(jsonData);
JsonNode data = jsonNode.get("data");
Object obj = null;
if (data.isArray() && data.size() > 0) {
obj = MAPPER.readValue(data.traverse(),
MAPPER.getTypeFactory().constructCollectionType(List.class, clazz));
}
return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
} catch (Exception e) {
return null;
}
}
public String getOk() {
return ok;
}
public void setOk(String ok) {
this.ok = ok;
}
}
二 控制器
package com.imooc.controller;
import java.util.Date;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.imooc.pojo.IMoocJSONResult;
import com.imooc.pojo.User;
//@Controller
@RestController // @RestController = @Controller + @ResponseBody
@RequestMapping("/user")
public class UserContoller {
@RequestMapping("/getUser")
// @ResponseBody
public User getUser() {
User u = new User();
u.setName("cakin");
u.setAge(35);
u.setBirthday(new Date());
u.setPassword("fsghkaf");
u.setDesc("hello cakin"); //该字段显示
return u;
}
@RequestMapping("/getUserJson")
// @ResponseBody
public IMoocJSONResult getUserJson() {
User u = new User();
u.setName("cakin");
u.setAge(35);
u.setBirthday(new Date());
u.setPassword("fsghkaf");
// u.setDesc("hello cakin"); //该字段不显示
return IMoocJSONResult.ok(u);
}
}
三 测试
1 输入: http://localhost:8080/user/getUser
输出
{
"name": "cakin",
"age": 35,
"birthday": "2018-11-10 08:13:59 下午",
"desc": "hello cakin"
}
2 输入: http://localhost:8080/user/getUserJson
输出:
{
"status": 200,
"msg": "OK",
"data": {
"name": "cakin",
"age": 35,
"birthday": "2018-11-10 08:15:06 下午"
},
"ok": null
}