@Transient 和 @JsonIgnore在Data序列化及存储中的区别

7 篇文章 1 订阅
5 篇文章 0 订阅
文章通过实例展示了在SpringDataJPA和MongoDB环境中,@Transient和@JsonIgnore注解的区别。@Transient用于标记不需存储到数据库的字段,而@JsonIgnore则会使得字段在序列化和反序列化过程中被忽略,即不会出现在查询结果中。
摘要由CSDN通过智能技术生成

@Transient是org.springframework.data.annotation中的一个注解,@JsonIgnore是com.fasterxml.jackson.annotation中的一个注解,接下来使用一个实例来介绍两者在使用上的区别,先来建立一个实体类:

@Data
public class User implements Serializable {	
	private static final long serialVersionUID = 1L;	
	private String id;
	private String name;
	// @JsonIgnore
	@Transient
	private String sex;	

这里使用的DB是MongoDB,使用JPA来连接MongoDB,这里就忽略MongoRepository的实现,直接来看使用部分:

@Slf4j
@RestController
@RequestMapping(path="/mongo")
public class MongoUserController {

	@Autowired
	private UserRepository userRepository;	
	
	@RequestMapping(path="/user",method=RequestMethod.GET)
	public void insertUser() {
		User user=new User();
		user.setId(new ObjectId().toString());
		user.setName("peach juice");
		user.setSex("female");
		user.setUpdateTimeStamp(new Date());
		
		userRepository.save(user);
		
	}
	@RequestMapping(path="/users",method=RequestMethod.GET)
	public List<User> getUsers() {
		List<User> userList=userRepository.findAll();
		return userList;
	}
}

接下来分别做几组实验:

实验一: 只在字段上添加@Transient注解

// DB存储结果
// 结果中没有sex字段
{
  "_id": {
    "$oid": "64462acf1ce37c749b722ed4"
  },
  "name": "peach juice",
  "_class": "com.learn.model.po.User"
}

// 读取结果
// 结果中含有sex字段,只是值为null
{
    "id": "64462aa71ce37c749b722ed2",
    "name": "peach juice",
    "sex": null
}

实验二: 只在字段上添加@JsonIgnore注解

// DB存储结果
// 结果中有sex字段
{
  "_id": {
    "$oid": "644637c3bdd5ca1f2c0d0d4d"
  },
  "name": "peach juice",
  "sex": "female",
  "_class": "com.learn.model.po.User"
}

// 读取结果
// 结果中含没有sex字段
{
    "id": "644637c3bdd5ca1f2c0d0d4d",
    "name": "peach juice"
}

总结:
由上面的结果可以看出,如果实体中一个字段不想出现在查询结果中时,但是要在DB中存储时,可以使用@JsonIgnore注解;如果实体中一个字段不想存储到DB时可以使用@Transient注解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值