当前位置: 首页 > news >正文

泉州建设培训中心网站中国软文网

泉州建设培训中心网站,中国软文网,vi报价单,wordpress自定义php文件有些小伙伴发现了,明明在返回的实体类中指定了属性为transient。为什么前端得到的返回json中还是有这个属性的值? 类: private String name; private transient String password;返回结果: { name:"刘大大", password:…

        有些小伙伴发现了,明明在返回的实体类中指定了属性为transient。为什么前端得到的返回json中还是有这个属性的值?

类:

  private String name;

private transient String password;

 返回结果:

{

        name:"刘大大",

        password:"baofu"

}

1. 序列化是什么?

1.1 是什么?

    序列化是将对象的状态(即其属性值)转换为一种可以存储或传输的形式的过程。这个过程通常用于以下几种场景:

  1. 持久化:将对象的状态保存到磁盘文件中,以便以后恢复。
  2. 网络传输:将对象的状态转换为字节流,以便在网络上传输。
  3. 进程间通信:将对象的状态转换为字节流,以便在不同的进程或线程之间传递。

1.2 主要目的

 序列化的主要目的是确保对象的状态可以在不同的环境中准确地恢复。具体来说,序列化有以下几种常见形式:

  1. 二进制序列化:将对象转换为字节流。
  2. JSON 序列化:将对象转换为 JSON 格式。
  3. XML 序列化:将对象转换为 XML 格式。

1.3  Java 中的序列化

         在 Java 中Java 中的序列化,序列化主要通过实现 Serializable 接口来完成。当一个类实现了 Serializable 接口后,它的对象就可以被序列化。


2. transient 是什么?


       transient 关键字主要用于 Java 的二进制序列化过程中。当一个字段被标记为 transient 时,Java 的序列化机制不会将这个字段写入到序列化的字节流中。
 

这是因为 transient 字段的值不应该被持久化,或者是由于安全性、性能等原因而不应该在网络上传输。

  1. 不希望将某些敏感数据(如密码)持久化。
  2. 某些字段在序列化时是不必要的,例如缓存数据。

3. transient 关键字在JSON序列化的问题

        尽管 transient 关键字在 Java 的二进制序列化中很有用,但在 JSON 序列化中却不起作用。常见的 JSON 序列化库(如 Jackson 和 Gson)并不会识别 transient 关键字。这意味着即使你将一个字段标记为 transient,它仍然会被序列化到 JSON 中。


4. 替代方案


        为了在 JSON 序列化中排除某些字段,可以使用 JSON 序列化库提供的注解和方法。以下是常见的替代方案:既然是JSON不会识别transient 。那就用JSON能否识别的方式进行处理


4.1 使用 Jackson 的 @JsonIgnore


Jackson 提供了 @JsonIgnore 注解来控制哪些字段应该被序列化到 JSON 中。这是一个非常直观且易于理解的方法。


4.2 示例代码


假设你有一个 User 类,并且你不希望将 password 字段包含在 JSON 输出中。

import com.fasterxml.jackson.annotation.JsonIgnore;@Data
public class User {public User(String username, String password) {this.username = username;this.password = password;}private String username;@JsonIgnoreprivate String password;}

4.3 控制器类 UserController


假设你有一个控制器类 UserController,用于返回 User 对象。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@RestController
public class UserController {@GetMapping("/user")public R getUser() {User user = new User("Alice", "secret");return R.data(user);}
}

4.4 输出结果


当你通过浏览器或工具访问 /user 接口时,返回的 JSON 将不再包含 password 字段。

{
    "username": "Alice"
}
 

5. 总结

        虽然 transient 可以帮助你控制 Java 的二进制序列化行为,但它并不是为 JSON 序列化设计的。如果你的目标是在 JSON 序列化过程中排除某些字段,建议使用 JSON 序列化库提供的机制,比如 Jackson 的 @JsonIgnore 或者类似的注解。这样做不仅更符合预期,而且代码的意图也更加清晰。

http://www.15wanjia.com/news/17567.html

相关文章:

  • 免费资源源码网站网站建设合同
  • 西安网站建设首选百度推广客户端登录
  • 有没有专门做印刷图的网站在线培训网站次要关键词
  • 湛江cms建站系统成人本科报考官网
  • 郑州航海路附近网站建设公司外包seo服务收费标准
  • ucc工业设计优化设计六年级下册语文答案
  • 网站上线发布流程360外链
  • 威海做网站的网络营销服务企业
  • 网站建设需要哪些成本优化加速
  • 建设公司网站开发方案泸州网站优化推广
  • 上海松江品划做网站新闻今天最新消息
  • 百度网站备案中央新闻联播
  • 网易163企业邮箱格式中小企业网站优化
  • 韩国风格网站模板下载seo和sem哪个工资高
  • 网站开发 会员模块百度做免费推广的步骤
  • vip视频解析网站建设百度关键词屏蔽
  • 网站建设7个基本流程seo推广优化外包价格
  • cms 动态网站开发网络推广与网络营销的区别
  • 浙江省杭州市软装设计公司黑帽seo优化推广
  • 北京的网站建设收费标准seo在中国
  • 北京做网站价格韩国最新新闻
  • 浙江品牌网站建设合肥百度推广优化
  • 南开网站建设优化seo域名注册服务商
  • 如果做网站用java百度一下你就知道下载安装
  • 三星做号网站西安刚刚宣布
  • 微信公众号人工客服安徽百度seo教程
  • 怎么让别人访问自己做的网站seo的重要性
  • xp系统中做网站服务器百度问问我要提问
  • 宣城做w网站的公司自媒体平台注册
  • 营销型企业网站开发网站优化排名公司