前言
在 SpringBoot 开发过程中 总会遇到 并不需要将 Bean 对象中的所有字段全部响应
这时候 我们就可以使用到 JsonView 这个注解了
编写接口
其实这里的接口 只是用来做标记使用的 给 Bean 的字段进行分类标记
在 JSONViewInterface 下 Video 这个接口是我拿来分类的 Video 下有一个 ViewHot 这个 ViewHot 继承 Base
而 Video 下的 All 继承了 ViewHot 后面我们看下效果
记住这个 Base 要让 JSONViewInterface 里面所有的接口去继承它 (分类接口除外)
public interface JSONViewInterface {
interface Video {
interface ViewHot extends Base {
}
interface All extends ViewHot {
}
}
interface Base {
}
}
编写 Entity
我们先来看 Result 的 Entity
Result 风格的 API 主要是统一响应的风格 我这里举个例子
重点看 vdata 这个字段 这个字段呢 是给客户端响应的数据
我给它加了个注解是 @JsonView(JSONViewInterface.Base.class)
public class ResponeEntity implements Serializable {
@JsonView(JSONViewInterface.Base.class)
public int errorid;
@JsonView(JSONViewInterface.Base.class)
public String errordesc;
@JsonView(JSONViewInterface.Base.class)
public Object vdata;
}
接下来我们再看需要响应的实体类
可以看到 vtMid 被我注解了 @JsonView(JSONViewInterface.Video.ViewHot.class)
vtId 则注解了 @JsonView(JSONViewInterface.Video.All.class)
public class VTopTableModel {
@JsonView(JSONViewInterface.Video.ViewHot.class)
private Long vtMid;
@JsonView(JSONViewInterface.Video.All.class)
private Long vtId;
}
编写 Controller
接下来我们看 Controller 控制器
@JsonView(JSONViewInterface.Video.ViewHot.class) 这个注解表示要响应标记 JSONViewInterface.Video.ViewHot.class 这个接口的字段
@JsonView(JSONViewInterface.Video.ViewHot.class)
@RequestMapping("/hotVideo")
public ResponeEntity hotVideo() {
List vTopTableModels = vTopService.selectHomeHot(getPageNum(), getPageSize());
ResponeEntity responeEntity = new ResponeEntity();
responeEntity.setErrorid(0);
responeEntity.setErrordesc("操作成功");
responeEntity.setVdata(vTopTableModels);
return responeEntity;
}
最后看一下响应数据
ps: 在 Controller 注解了 JSONViewInterface.Video.ViewHot.class 所以只响应标记了这个接口的字段
{
"errorid": 0,
"errordesc": "操作成功",
"vdata": [
{
"vtMid": "928fdfaef68e42e6803bc0fc9e04cc7a"
},
{
"vtMid": "0fa8934d5cd44f63b011d392ecba78ed"
},
{
"vtMid": "060f36725ac14b1596955c589e0b96a8"
},
{
"vtMid": "70c845fbb0294d28bbd6e31090467fbb"
},
{
"vtMid": "a12548ecfc084712848937f961402fb3"
},
{
"vtMid": "444336fe669b475bb8d33a682aeb27f6"
},
{
"vtMid": "8b6fdc1c51a641928c0cb69c740b0310"
},
{
"vtMid": "a65c668e97c748c184dddd8eb401129c"
},
{
"vtMid": "56e79c6ce068469db6ebe2ac359f2cba"
},
{
"vtMid": "c5f63cf5933a4db08f68829e1aa789ec"
}
]
}
再往下看标记 JSONViewInterface.Video.All.class
Controller 修改标记接口
@JsonView(JSONViewInterface.Video.All.class)
@RequestMapping("/hotVideo")
public ResponeEntity hotVideo() {
List vTopTableModels = vTopService.selectHomeHot(getPageNum(), getPageSize());
ResponeEntity responeEntity = new ResponeEntity();
responeEntity.setErrorid(0);
responeEntity.setErrordesc("操作成功");
responeEntity.setVdata(vTopTableModels);
return responeEntity;
}
响应数据
{
"errorid": 0,
"errordesc": "操作成功",
"vdata": [
{
"vtMid": "928fdfaef68e42e6803bc0fc9e04cc7a",
"vtId": 0
},
{
"vtMid": "0fa8934d5cd44f63b011d392ecba78ed",
"vtId": 1
},
{
"vtMid": "060f36725ac14b1596955c589e0b96a8",
"vtId": 2
},
{
"vtMid": "70c845fbb0294d28bbd6e31090467fbb",
"vtId": 3
},
{
"vtMid": "a12548ecfc084712848937f961402fb3",
"vtId": 4
},
{
"vtMid": "444336fe669b475bb8d33a682aeb27f6",
"vtId": 5
},
{
"vtMid": "8b6fdc1c51a641928c0cb69c740b0310",
"vtId": 6
},
{
"vtMid": "a65c668e97c748c184dddd8eb401129c",
"vtId": 7
},
{
"vtMid": "56e79c6ce068469db6ebe2ac359f2cba",
"vtId": 8
},
{
"vtMid": "c5f63cf5933a4db08f68829e1aa789ec",
"vtId": 9
}
]
}
结尾 因为 JSONViewInterface.Video.All 接口继承了 JSONViewInterface.Video.ViewHot
所以 在 Controller 标记了 All 接口 会将标记了 ALL 父类的字段也响应出来
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于