在使用springboot开发接口时,相信很多小伙伴都会定义一个统一的返回接口格式,例如
{
"code": "0",
"msg": "",
"data": {
}
}
我定义了一个ResultVo对象,代码如下:
import java.io.Serializable;
/**
* 系统全局返回类
* @author xxx
*/
public class ResultVo<T> implements Serializable {
private static final long serialVersionUID = -1225323124494233417L;
/**
* 接口返回状态码
*/
private String code="0";
/**
* 接口返回提示信息
*/
private String msg="";
/**
* 接口数据
*/
private T data;
public ResultVo() {
}
public ResultVo(String code, String msg) {
super();
this.code = code;
this.msg = msg;
}
public ResultVo(String code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = 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 T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
在springboot的controller中我如果要返回一个对象,我就可以直接将要返回的参数传入ResultVo中,封装成统一的数据格式返给前台。
如:
@GetMapping("user")
public ResultVo<UserInfoVo> getUserInfo(){
UserInfoVo userInfoVo = new UserInfoVo();//实际开发中从接口获取用户信息
return new ResultVo<UserInfoVo>("0","",userInfoVo);
}
以上代码是我写的一个demo,实际获取UserInfo信息是从其他系统或者说其他平台接口获取的,在信息获取的时候我就遇到一个泛型序列化的问题了。
我上面定义的ResultVo含code、msg、data字段,我去调用其他平台接口时也是返回相同字段的字符串,此时如何使用jackson正确序列化对象呢。
废话不多说,直接上代码(我也是请教了别人才知道该方法的)
public static <T> ResultVo<T> postForEntity(Class tclass) {
ObjectMapper mapper = new ObjectMapper();
//调用其他平台接口获取json数据,省略
//反序列化的时候如果多了其他属性,不抛出异常
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
JavaType javaType = mapper.getTypeFactory().constructParametricType(ResultVo.class, tclass);
ResultVo<T> resultVo = mapper.readValue("获取到的json数据", javaType);
return resultVo;
}
使用时将<T>的类型传入即可,如:
@GetMapping("user")
public ResultVo<UserInfoVo> getUserInfo(){
// UserInfoVo userInfoVo = new UserInfoVo();//实际开发中从接口获取用户信息
UserInfoVo userInfoVo = RestTemplateUtil.postForEntity(UserInfoVo.class);
return new ResultVo<UserInfoVo>("0","",userInfoVo);
}
搞定,就是这么简单!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~结束