JsonView 与JsonIgnore 使用
2021-04-22 22:28
标签:type public 字段 print http factory code oid sys 简述:现在项目多采用前后分离方式 那么前后端的数据传输几乎都采用的是json形式的 那么我们在查询数据返回专为json的形式时候有时候需要忽略某些字段,我们如何来做那????? 通常采用的json 转换方式有两种分别是fastjson 和jackjson两种 1、直接转为json时候任何时候都不需要当前字段做为json转换 @JsonIgnore 我这里采用的jackjson 使用方式 控制器 输出结果: 分析结果可知 当我门在某一个属性添加@JsonIgnore注解的时候 我们会发现专为json的结果集对象里面不包含我们添加了注解的属性 2、当我们返回结果集中要忽略到某一属性 在返回的详情信息中又包含忽略的属性 我们可以采用@JsonView属性 @JsonView属性使用规则 1)必须使用接口声明多个视图 2)在值对象的get方法上指定视图 3)在指定的控制器上指定视图 具体案例如下: 实体: 控制器定义: 单元测试: 指定详细视图方式结果集: 指定简单视图方式结果集: @JsonView注解 最终专为json的数据只是添加了当前注解的属性字段 没有添加的不会展示出来 JsonView 与JsonIgnore 使用 标签:type public 字段 print http factory code oid sys 原文地址:https://www.cnblogs.com/lwdmaib/p/12241535.htmlpackage lwd.security.dto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonView;
import jdk.nashorn.internal.ir.annotations.Ignore;
public class User {
/**
* 定义一个简单视图
*/
public interface UserSimpleView{};
/**
* 定义一个详细视图 继承简单视图
*/
public interface UserDetailView extends UserSimpleView{};
private String username;
private String password;
private Integer age;
@JsonIgnore
private String email;
/**
* 指定视图
* @return
*/
@JsonView(UserSimpleView.class)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
/**
* 指定视图
* @return
*/
@JsonView(UserDetailView.class)
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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
package lwd.security.user.controller;
import com.fasterxml.jackson.annotation.JsonView;
import lwd.security.dto.User;
import lwd.security.dto.UserQueryCondition;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
public class UserController {
/**
* 当前控制器中采用了简单视图
* @param condition
* @return
*/
@RequestMapping(value = "/user",method = RequestMethod.GET)
@JsonView(User.UserSimpleView.class)
public List
package lwd.security.controller;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.results.ResultMatchers;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MockMvcBuilder;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import java.awt.*;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup(){
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
@Test
public void whenQuerySuccess() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/user")
.param("username","1111")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(3));
}
/**
* 正则匹配信息
* @throws Exception
*/
@Test
public void whenQuery4XXError() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/user/1")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().isOk());
}
/**
* 采用简单视图方式
* @throws Exception
*/
@Test
public void whenQueryJsonViewInfo() throws Exception {
String result = mockMvc.perform(MockMvcRequestBuilders.get("/user/1")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn().getResponse().getContentAsString();
System.out.println(result);
}
/**
* 采用详细视图方式
* @throws Exception
*/
@Test
public void whenQueryJsonViewDetailInfo() throws Exception {
String result = mockMvc.perform(MockMvcRequestBuilders.get("/user")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn().getResponse().getContentAsString();
System.out.println(result);
}
/**
* 采用属性忽略方式
* @throws Exception
*/
@Test
public void whenQueryIgnore() throws Exception {
String result = mockMvc.perform(MockMvcRequestBuilders.get("/user/get/1")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn().getResponse().getContentAsString();
System.err.println(result);
}
}
文章标题:JsonView 与JsonIgnore 使用
文章链接:http://soscw.com/index.php/essay/78273.html