1.使用场景

在某一些请求返回的JSON中,我们并不希望返回某些字段。而在另一些请求中需要返回某些字段。
例如:

  • 查询列表请求中,不返回password字段
  • 获取用户详情中,返回password字段

用户类

public class User
{
private Integer id;
private String username;
private String password;
private Date birthday;
}

2.实现

2.1 @JsonView的使用步骤

  • 1.使用接口来声明多个视图
  • 2.在值对象的get方法或属性上指定视图
  • 3.在Controller的方法上指定视图

2.2 实现的具体代码

(1)实体类 -- User

import com.fasterxml.jackson.annotation.JsonView;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date; @Data
public class User
{
public interface SimpleView{}
public interface DetailView extends
SimpleView{} @NotNull
@JsonView(DetailView.class)
private Integer id; @NotBlank(message = "参数username不能为空")
@JsonView(SimpleView.class)
private String username; @NotBlank(message = "参数password不能为空")
@JsonView(DetailView.class)
private String password; @JsonView(DetailView.class)
private Date birthday;
}

上面定义了两个视图接口 UserSimpleView  和  UserDetailView, 其中UserDetailView继承UserSimpleView,UserDetailView拥有视图UserSimpleView的属性;在相应的get方法或属性上声明JsonView;

(2)Controller的定义 -- UserController

@RestController
@RequestMapping("/user")
public class UserController
{
@GetMapping
@JsonView(User.SimpleView.class)
public List<User> queryList(User user,
//给分页对象设置默认值
@PageableDefault(page = 2, size = 2, sort = "username,asc") Pageable pageable)
{
System.out.println(user);
List<User> list = new ArrayList<>();
list.add(user);
return list;
} @GetMapping("/{id:\\d+}") //正则表达式, 参数必须是全数字
@JsonView(User.DetailView.class)
public User getInfo(@PathVariable(name = "id") Integer userId){
User user = new User();
user.setId(userId);
user.setUsername("Tom");
return user;
}
}

在controller的不同方法上使用不同的视图;

(3)测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserControllerTest {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setup(){
//根据webApplicationContext构建mockMvc
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
} @Test
public void whenQuerySuccess() throws Exception {
String result = mockMvc.perform(MockMvcRequestBuilders.get("/user")
.param("username","tom")
.param("age","11")
.param("ageTo","30")
.param("page","20")
.param("pageSize","100")
.param("sort","age,desc")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(3))
.andReturn().getResponse().getContentAsString();
System.out.println(result);
} /**
* 请求成功逻辑测试
* @throws Exception
*/
@Test
public void wherGetSuccess() throws Exception {
String result = mockMvc.perform(MockMvcRequestBuilders.get("/user/1")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.username").value("tom"))
.andReturn().getResponse().getContentAsString();
System.out.println(result);
} /**
* 路径正则表达式的匹配规则测试
* @throws Exception
*/
@Test
public void whenGetFail() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/user/a")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().is4xxClientError());
}
}

测试结果

(1)查询全部的返回结果只有username字段;

(2)查询详情的返回结果所有字段都有;

  • 这里完成了步骤1和步骤2

@JsonView的使用的更多相关文章

  1. 推荐两个谷歌的json-view插件(附带下载分享地址)

    1.JSONView 网盘下载地址:http://pan.baidu.com/s/1hrGlaVa 效果图: 2.JSON-handle 网盘下载地址:http://pan.baidu.com/s/1 ...

  2. Safari里使用JsonView

    这是第三方开发的一个Safari的jsonView,和chrome以及FF功能类似,现在已经更新到1.1版了. 传送门:https://github.com/rfletcher/safari-json ...

  3. chrome jsonView插件安装

    chrome 应用商店打不开,想装插件愁死人了. 今天想到一个好方法,以 jsonView插件为例分享一下. 1.打开 https://github.com : 2.搜索 jsonView 链接:ht ...

  4. 谷歌浏览器插件-jsonView插件安装与使用

    本文转载:http://www.bubuko.com/infodetail-700647.html 1 安装 1.打开 https://github.com : 2.搜索 jsonView 链接:ht ...

  5. 【Chrome插件】去掉因使用jsonView插件的弹出窗口"请停用以开发者模式运行的扩展程序"

    前言 小编最近使用jsonView插件时,每次打开谷歌浏览器都会弹出下面的窗口,上网搜索,找到一个非常有效的方法. 解决方法 一.新建一个文本文档 二.复制代码 <# : @echo off c ...

  6. 【JsonView工具】谷歌浏览器中安装JsonView扩展程序

    接口测试过程中,有时候要查看接口返回的数据(比如Get接口),为了更方便的查看,发现这个插件挺好用的. 实际开发工作中经常用到json数据,那么就会有这样一个需求:在谷歌浏览器中访问URL地址返回的j ...

  7. 谷歌浏览器中安装JsonView扩展程序

    实际开发工作中经常用到json数据,那么就会有这样一个需求:在谷歌浏览器中访问URL地址返回的json数据能否按照json格式展现出来. 比如,在谷歌浏览器中访问:http://jsonview.co ...

  8. 【转】让浏览器格式化显示JSON数据之chrome jsonView插件安装

    jsonView 用来让Chrome浏览器能格式化的显示JSON数据. 以上是网上找的方式,且试验成功! 步骤: 1.打开 https://github.com : 2.搜索 jsonView 链接: ...

  9. 使用@JsonView注解控制返回的Json属性

    我也是刚看到原来还可以这么玩,但是我还是习惯使用Dto,我总感觉这样做的话实体类耦合程度有点高.还是记录以下,万一今后用到了呢 ⒈在实体类中使用接口来声明该实体类的多个视图. ⒉在实体类的属性get方 ...

  10. Spring MVC中@JsonView的使用

    一.@JsonView注解的简介 @JsonView是jackson json中的一个注解,Spring webmvc也支持这个注解,它的作用就是控制输入输出后的json 二.@JsonView注解的 ...

随机推荐

  1. C# Random

    一.简介 在Random类用于创建随机数.(当然是伪随机的.) 二.Random用法 例: Random rnd = new Random(); int month = rnd.Next(1, 13) ...

  2. Java学习——包装类

    Java学习——包装类 摘要:本文主要介绍了Java中常用的包装类和基本类型之间的转换,包装类或基本类型和String之间的转换. 部分内容来自以下博客: https://www.cnblogs.co ...

  3. SQLServer 高效 分页存储过程

    /********************************************************************** 参数:@PrimaryKey 主键,@OrderBy 排 ...

  4. BBR加速 Centos

    BBR是什么 BBR 是 Google 提出的一种新型拥塞控制算法,可以使 Linux 服务器显著地提高吞吐量和减少 TCP 连接的延迟. BBR项目地址 https://github.com/goo ...

  5. Java打印9*9乘法表

    废话不多说直接贴代码, 先放一个标准的正三角形状的 for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System ...

  6. Scrum冲刺第四篇

    一.每日例会 会议照片 成员 昨日已完成的工作 今日计划完成的工作 工作中遇到的困难 陈嘉欣 撰写博客,管理成员提交代码 和队友一同开发音乐控制模块 对音频控制方面知识了解少,功能实现困难 邓镇港 帮 ...

  7. mycat原理及分表分库入门

    1.什么是MyCat: MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原 ...

  8. iptables 学习笔记

    1. 安装iptables yum install iptables centos7: yum install -y iptables-services 2. service命令 查看iptables ...

  9. debian apt-get 代理

    一:在 /etc/apt/目录下建立 apt.conf 文件增加如下 Acquire::http::Proxy "http://proxyxxxxxxx:port"; 注意格式:最 ...

  10. tensorflow模型量化实例

    1,概述 模型量化应该是现在最容易实现的模型压缩技术,而且也基本上是在移动端部署的模型的毕竟之路.模型量化基本可以分为两种:post training quantizated和quantization ...