爪哇基础 之 @JsonIgnore 注解
专属目录
- 爪哇基础 之 @JsonIgnore 注解
- 前言
- 作用
- 使用
- 正常不使用注解写法
- pojo 实体类
- Example类
- Service 逻辑层
- Mapper 数据持久化层 (此处逆向工程都可生成)
- Controller 控制层
- 测试结果
- 添加使用注解后写法
- 修改后的实体类
- 添加注解后测试结果
- 注意⚠️
- 总结
爪哇基础 之 @JsonIgnore 注解
前言
日常Java开发时,会经常与前端开发、ios 或 安卓开发,进行数据交互,前面我们也说了使用json 序列化后交互,可是又有一个头疼的问题,那就是一般返回到前端的实体类中,是有一些属性不想暴露出去,比如 用户的密码,还有一些自增的ID等等一些不需要的信息。而有时候也有自身的原因,想偷懒不想专门写个 VO
、DTO
、PO
,可那些多余的字段前端又不需要,我们又该如何处理呢!
今天我们就来说下仅用一个注解,即可搞定以上问题!这个注解就是 —— @JsonIgnore
,它是 Jackson
注解包
下的一个注解!
具体 Jackson 如何使用,可点击查看!
爪哇基础 之 使用 Jackson 处理 JSON 序列化与反序列化
作用
@JsonIgnore
的作用到底是什么呢!
它的作用就是在后端给前端数据的时候对后端发送出的json字符串能够发挥作用的一个注解,可以忽略不想传递给前台的属性或接口
如果不使用此注解的话,在json序列化时将java bean中的一些属性删除掉后,对于前端是不需要,可是我们后端操作的时候却是需要的,如 用户的密码字段,前端并不需要返回,但是后端操作逻辑处理,验证登录等等都是需要的,如果将属性删掉,就无法使用 set/get 方法,也就失去了对数据的操作!
使用
那@JsonIgnore
该如何使用呢?
下面我们来写一个简单的实例来清楚的看下效果!
正常不使用注解写法
pojo 实体类
User.java
package com.json.bean;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.util.Date;/*** @ClassName: User* @Description: (描述)* @Author: WHT* @Version: V1.0* @Date: 2020/11/5 17:55*/@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {private Integer id;private String username;private String password;private Integer age;private Integer sex;private Integer status;private Date date;private static final long serialVersionUID = 1L;}
Example类
UserExample.java
Example类
Mybatis 逆向工程直接生成
即可!
如果还不会逆向工程
的话,可查看以下文章,点击即可查看进一步学习!
IDEA 的 mybatis-generate 插件生成代码
摆脱乏味的撸码,见证魔术代码
Service 逻辑层
UserService.java
(接口)
package com.json.service;import com.json.bean.User;import java.util.List;/*** @ClassName: UserService* @Description: (描述)* @Author: WHT* @Version: V1.0* @Date: 2020/11/6 11:54*/
public interface UserService {List<User> getUserList();
}
UserServiceImpl.java
(接口实现类)
package com.json.service;import com.json.bean.User;
import com.json.bean.UserExample;
import com.json.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** @ClassName: UserServiceImpl* @Description: (描述)* @Author: WHT* @Version: V1.0* @Date: 2020/11/6 11:55*/@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> getUserList() {return userMapper.selectByExample(new UserExample());}
}
Mapper 数据持久化层 (此处逆向工程都可生成)
UserMapper.java
(接口)
package com.json.mapper;import com.json.bean.User;
import com.json.bean.UserExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;@Repository
public interface UserMapper {List<User> selectByExample(UserExample example);
}
UserMapper.xml
映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.json.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.json.bean.User"><id column="user_id" jdbcType="INTEGER" property="id"/><result column="user_username" jdbcType="VARCHAR" property="username"/><result column="user_password" jdbcType="VARCHAR" property="password"/><result column="user_age" jdbcType="INTEGER" property="age"/><result column="user_sex" jdbcType="INTEGER" property="sex"/><result column="user_status" jdbcType="INTEGER" property="status"/><result column="user_date" jdbcType="DATE" property="date"/></resultMap><sql id="Example_Where_Clause"><where><foreach collection="oredCriteria" item="criteria" separator="or"><if test="criteria.valid"><trim prefix="(" prefixOverrides="and" suffix=")"><foreach collection="criteria.criteria" item="criterion"><choose><when test="criterion.noValue">and ${criterion.condition}</when><when test="criterion.singleValue">and ${criterion.condition} #{criterion.value}</when><when test="criterion.betweenValue">and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}</when><when test="criterion.listValue">and ${criterion.condition}<foreach close=")" collection="criterion.value" item="listItem" open="("separator=",">#{listItem}</foreach></when></choose></foreach></trim></if></foreach></where></sql><sql id="Base_Column_List">user.id as user_id, user.username as user_username, user.`password` as `user_password`, user.age as user_age, user.sex as user_sex, user.`status` as `user_status`, user.`date` as `user_date`</sql><select id="selectByExample" parameterType="com.json.bean.UserExample" resultMap="BaseResultMap">select<if test="distinct">distinct</if><include refid="Base_Column_List"/>from user user<if test="_parameter != null"><include refid="Example_Where_Clause"/></if><if test="orderByClause != null">order by ${orderByClause}</if><if test="limit != null"><if test="offset != null">limit ${offset}, ${limit}</if><if test="offset == null">limit ${limit}</if></if></select>
</mapper>
Controller 控制层
UserController.java
控制层
package com.json.controller;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.json.bean.User;
import com.json.service.UserService;
import com.widget.bean.Category;
import com.widget.bean.Widgetdetail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;/*** @ClassName: UserController* @Description: (描述)* @Author: WHT* @Version: V1.0* @Date: 2020/11/5 17:55*/@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@ResponseBody@RequestMapping("list")public String getUserList() throws JsonProcessingException {List<User> userList = userService.getUserList();ObjectMapper objectMapper = new ObjectMapper();return objectMapper.writeValueAsString(userList);}}
测试结果
此时发现正常请求数据,实体类的所有属性及值都会返回!
[{"id": 1,"username": "zhangsan","password": "zs123","age": 20,"sex": 0,"status": 0,"date": 1604592000000}
]
添加使用注解后写法
其他代码不需要修改
,只需要给 实体类不想暴露出去的属性添加 @JsonIgnore
注解即可完美解决!
修改后的实体类
User.java
package com.json.bean;import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.util.Date;/*** @ClassName: User* @Description: (描述)* @Author: WHT* @Version: V1.0* @Date: 2020/11/5 17:55*/@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {@JsonIgnore //加了注解private Integer id;private String username;@JsonIgnoreprivate String password;private Integer age;private Integer sex;@JsonIgnoreprivate Integer status;@JsonIgnoreprivate Date date;private static final long serialVersionUID = 1L;}
此时可以发现我只有对 username
、 age
、 sex
三个属性没有添加注解!
最后我们重启服务,重新测试查看结果!
添加注解后测试结果
亮点来了!
最终测试发现,结果只有没有加注解的三个属性及对应的值,其余属性都没有返回!
[{"username": "zhangsan","age": 20,"sex": 0}
]
注意⚠️
如果发现加了 @JsonIgnore
注解没有生效
,可能 jar 包冲突了,因为你可能在 数据 Json 序列化的时候使用的是 alibaba
的 fastjson
, 这时候就不能使用 @JsonIgnore
, 因为它是 Jackson
的, alibaba
的 fastjson
需要使用 @JSONField(serialize = false)
注解。
总结
看到这,今天要说的 @JsonIgnore 注解 就到此完结了,想下发那个属性就下发那个属性,是不是非常nice,数据交互起来就更完美!快去试一试吧!别着急,还有更多的秘密等着你来探索!
分享嗨起来,美德传起来,点个星标从此探索之路不迷茫!
微信扫描二维码,关注我的原创日更公众号,可以查看更多程序的秘密!
爪哇基础 之 @JsonIgnore 注解相关推荐
- Java基础教程:注解
Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...
- java基础知识之注解、反射(一)
前言 此博客为供个人学习总结备用,如有错误请指正. 正文 Annotation(注解) java自带的注解包含以下三个: 1.@Override 注解表示重写父类的方法 2.@Deprecated 声 ...
- Java基础回归之注解Annotation【低仿ButterKnife实战篇】
前言 书接上回,上回说到库里对战湖人三分10投0中,真真气煞我库也,这下把气全撒在鹈鹕身上,一口气轰下破纪录的13记三分. 上回说到Java基础回归之注解Annotation[基础篇],这回我们来真刀 ...
- 生信小白学习日记Day3——NGS基础 NGS分析注解(质量分析软件)
2019年5月27日,天气舒适,忙碌一天之后开始今天的生信学习.今天就昨天Day2-2的一些标记加以查询说明,仅供参考. NGS基础 NGS分析注解 1. 质量分析软件 昨天提到,拿到数据后可以通过一 ...
- 关于双向多对一的@JsonIgnore注解使用方法
问题描述:若不使用@JsonIgnore注解,通过SpringMvc作为Json返回页面时,会出现无限循环的错误.因为一方中拼接了多方,多方又拼接了一方,循环下去. 下面是一个自关联的目录类,用来当作 ...
- 【BUG】@JsonIgnore注解引发的java.sql.SQLException【已解决】
最近做了一个需求,页面上展示的字段要求尽可能的简介,但是实际插入到数据库的时候,会有很多ID,还有诸如创建人,创建时间,更新人,更新时间等字段. 而这些字段,前端要求不展示. 最后的页面效果如下: 于 ...
- json序列化||反序列化过滤某些属性 之@jsonignore注解
Jackson相关: 使用Jackson相关的注解时一定要注意自己定义的属性命名是否规范. 命名不规范时会失去效果.(例如Ename ,Eage 为不规范命名."nameE",& ...
- 注解@JsonIgnore 注解使用失效问题
如果注解失效,可能是因为你使用的是fastJson,尝试使用对应的注解来忽略字段,注解为:@JSONField(serialize = false),使用方法一样 补充: jackSon中@JsonI ...
- @JsonIgnore注解一些问题的记录
@JsonIgnore注解 使用时的坑 - 星空物语之韵 - 博客园 springboot 默认内置使用的是jackson spring boot2 修改默认json解析器Jackson为fastjs ...
最新文章
- php 指定表格字体大小_PHPExcel根据单元格值设置字体/背景颜色
- pytorch遇见RuntimeError: CUDA out of memory的解决
- Android Studio下的目录结构
- 5G年终盘点:2018,意难平
- AI时代数据之争,我们需要什么样的“数据权”?
- 放弃 Windows 后 ,开源操作系统能成为主流桌面系统吗?
- 跟我一起学Redis之高可用从主从复制开始
- 排序集锦(各种排序算法的特点及性能分析)
- [零基础学JAVA]Java SE应用部分-35.JAVA类集之二
- Unity的IOS接入新浪微博
- php中通过post和get传递数组的方法
- sql server中截取字符串的常用函数(自己经常到用的时候想不起来所以拿到这里)...
- 二年级计算机考试题,二年级计算机笔测试题(XX-XX第一学期
- 【安装库】matlab2020b安装及百度网盘提速
- GB28181协议实现简介
- 谭浩强版本C语言课后习题第二章
- Linux中安装tree命令
- 密钥加密法(指针应用)
- JavaScript-Tool:Moment.js
- 设置计算机网络密码怎么设置路由器,192.168.1.1