专属目录

  • 爪哇基础 之 @JsonIgnore 注解
    • 前言
    • 作用
    • 使用
      • 正常不使用注解写法
        • pojo 实体类
        • Example类
        • Service 逻辑层
        • Mapper 数据持久化层 (此处逆向工程都可生成)
        • Controller 控制层
        • 测试结果
      • 添加使用注解后写法
        • 修改后的实体类
        • 添加注解后测试结果
    • 注意⚠️
    • 总结

爪哇基础 之 @JsonIgnore 注解

前言

日常Java开发时,会经常与前端开发、ios 或 安卓开发,进行数据交互,前面我们也说了使用json 序列化后交互,可是又有一个头疼的问题,那就是一般返回到前端的实体类中,是有一些属性不想暴露出去,比如 用户的密码,还有一些自增的ID等等一些不需要的信息。而有时候也有自身的原因,想偷懒不想专门写个 VODTOPO ,可那些多余的字段前端又不需要,我们又该如何处理呢!

今天我们就来说下仅用一个注解,即可搞定以上问题!这个注解就是 —— @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;}

此时可以发现我只有对 usernameagesex 三个属性没有添加注解!

最后我们重启服务,重新测试查看结果!

添加注解后测试结果

亮点来了!
最终测试发现,结果只有没有加注解的三个属性及对应的值,其余属性都没有返回!

[{"username": "zhangsan","age": 20,"sex": 0}
]

注意⚠️

如果发现加了 @JsonIgnore 注解没有生效,可能 jar 包冲突了,因为你可能在 数据 Json 序列化的时候使用的是 alibabafastjson , 这时候就不能使用 @JsonIgnore , 因为它是 Jackson 的, alibabafastjson 需要使用 @JSONField(serialize = false) 注解。

总结

看到这,今天要说的 @JsonIgnore 注解 就到此完结了,想下发那个属性就下发那个属性,是不是非常nice,数据交互起来就更完美!快去试一试吧!别着急,还有更多的秘密等着你来探索!

分享嗨起来,美德传起来,点个星标从此探索之路不迷茫!

微信扫描二维码,关注我的原创日更公众号,可以查看更多程序的秘密!

爪哇基础 之 @JsonIgnore 注解相关推荐

  1. Java基础教程:注解

    Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...

  2. java基础知识之注解、反射(一)

    前言 此博客为供个人学习总结备用,如有错误请指正. 正文 Annotation(注解) java自带的注解包含以下三个: 1.@Override 注解表示重写父类的方法 2.@Deprecated 声 ...

  3. Java基础回归之注解Annotation【低仿ButterKnife实战篇】

    前言 书接上回,上回说到库里对战湖人三分10投0中,真真气煞我库也,这下把气全撒在鹈鹕身上,一口气轰下破纪录的13记三分. 上回说到Java基础回归之注解Annotation[基础篇],这回我们来真刀 ...

  4. 生信小白学习日记Day3——NGS基础 NGS分析注解(质量分析软件)

    2019年5月27日,天气舒适,忙碌一天之后开始今天的生信学习.今天就昨天Day2-2的一些标记加以查询说明,仅供参考. NGS基础 NGS分析注解 1. 质量分析软件 昨天提到,拿到数据后可以通过一 ...

  5. 关于双向多对一的@JsonIgnore注解使用方法

    问题描述:若不使用@JsonIgnore注解,通过SpringMvc作为Json返回页面时,会出现无限循环的错误.因为一方中拼接了多方,多方又拼接了一方,循环下去. 下面是一个自关联的目录类,用来当作 ...

  6. 【BUG】@JsonIgnore注解引发的java.sql.SQLException【已解决】

    最近做了一个需求,页面上展示的字段要求尽可能的简介,但是实际插入到数据库的时候,会有很多ID,还有诸如创建人,创建时间,更新人,更新时间等字段. 而这些字段,前端要求不展示. 最后的页面效果如下: 于 ...

  7. json序列化||反序列化过滤某些属性 之@jsonignore注解

    Jackson相关: 使用Jackson相关的注解时一定要注意自己定义的属性命名是否规范.  命名不规范时会失去效果.(例如Ename ,Eage 为不规范命名."nameE",& ...

  8. 注解@JsonIgnore 注解使用失效问题

    如果注解失效,可能是因为你使用的是fastJson,尝试使用对应的注解来忽略字段,注解为:@JSONField(serialize = false),使用方法一样 补充: jackSon中@JsonI ...

  9. @JsonIgnore注解一些问题的记录

    @JsonIgnore注解 使用时的坑 - 星空物语之韵 - 博客园 springboot 默认内置使用的是jackson spring boot2 修改默认json解析器Jackson为fastjs ...

最新文章

  1. php 指定表格字体大小_PHPExcel根据单元格值设置字体/背景颜色
  2. pytorch遇见RuntimeError: CUDA out of memory的解决
  3. Android Studio下的目录结构
  4. 5G年终盘点:2018,意难平
  5. AI时代数据之争,我们需要什么样的“数据权”?
  6. 放弃 Windows 后 ,开源操作系统能成为主流桌面系统吗?
  7. 跟我一起学Redis之高可用从主从复制开始
  8. 排序集锦(各种排序算法的特点及性能分析)
  9. [零基础学JAVA]Java SE应用部分-35.JAVA类集之二
  10. Unity的IOS接入新浪微博
  11. php中通过post和get传递数组的方法
  12. sql server中截取字符串的常用函数(自己经常到用的时候想不起来所以拿到这里)...
  13. 二年级计算机考试题,二年级计算机笔测试题(XX-XX第一学期
  14. 【安装库】matlab2020b安装及百度网盘提速
  15. GB28181协议实现简介
  16. 谭浩强版本C语言课后习题第二章
  17. Linux中安装tree命令
  18. 密钥加密法(指针应用)
  19. JavaScript-Tool:Moment.js
  20. 设置计算机网络密码怎么设置路由器,192.168.1.1

热门文章

  1. docker安装webgoat
  2. App Links详细介绍
  3. 此远程计算机不支持remoteapp,部署RemoteApp实现应用程序的远程调用
  4. MySQL数据导入与导出
  5. jQuery隐藏/显示
  6. 单元测试的框架Hamcrest
  7. 【知识星球】图像生成玩腻了?视频生成技术何不来了解一下
  8. 物联网商机惊人 SoC大厂跨界淘金
  9. 如果伦敦变成了一个巨大的AR涂鸦游戏场……
  10. NTLM 工作原理概述