@JsonIgnore @JsonProperty
时间: 2023-08-17 07:13:19 浏览: 167
这两个注解都是用于在Java对象与JSON数据之间进行序列化和反序列化的过程中进行属性的映射。
@JsonIgnore注解用于指示在序列化和反序列化过程中忽略某个属性。当某个属性被标记为@JsonIgnore后,在对象转换为JSON数据时,该属性会被忽略掉。同样地,当JSON数据转换为对象时,该属性也会被忽略掉。
@JsonProperty注解用于指定属性在JSON数据中的名称。默认情况下,Java对象的属性名称会被直接映射到JSON数据的字段名。但是,有时候我们需要自定义属性在JSON数据中的名称,这时就可以使用@JsonProperty注解来指定。通过该注解,我们可以将Java对象的属性名与JSON数据的字段名进行映射。
这两个注解通常与其他序列化和反序列化框架(如Jackson)一起使用,以便更灵活地控制对象与JSON数据之间的转换过程。
相关问题
@JsonIgnore 和 @JsonProperty 缓存
@JsonIgnore和@JsonProperty是两个常用的注解,用于在Java对象和JSON之间进行序列化和反序列化操作,与缓存无直接关系。
@JsonIgnore注解通常用于在序列化过程中排除某些属性,即不将其包含在生成的JSON中。可以在类的属性上使用@JsonIgnore注解,或者使用在getter和setter方法上。这样,当将对象转换为JSON时,被@JsonIgnore注解标记的属性将被忽略。
@JsonProperty注解则用于指定属性在转换为JSON时的名称。可以在属性上使用@JsonProperty注解,并指定属性在JSON中的名称。这个注解通常与@JsonIgnore一起使用,@JsonIgnore用于排除属性,而@JsonProperty用于指定排除属性的替代名称。
至于缓存的相关问题,可以使用Spring Framework提供的缓存注解,如@Cacheable和@CacheEvict。@Cacheable注解用于在方法上指定该方法的返回值应该被缓存起来,可以指定缓存的名称和缓存的key。而@CacheEvict注解则用于在方法执行后清空指定的缓存,可以指定要清空的缓存名称和缓存的key。
这两个注解的具体使用和原理需要根据具体的缓存框架来解释,比如使用Spring的缓存框架,可以结合使用@Cacheable和@CacheEvict来实现对缓存的管理和控制。<span class="em">1</span><span class="em">2</span>
#### 引用[.reference_title]
- *1* [类继承父类遇到和父类同名不同类型的属性可以用json注解转化@JsonProperty](https://blog.csdn.net/y666666y/article/details/108124448)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [springboot结合 @Cacheable和@CacheEvict拉起和清空缓存.zip](https://download.csdn.net/download/weixin_43812522/13125068)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
@JsonIgnore接不到值
在使用 @JsonIgnore 注解时,如果发现它接不到值,可能是因为你在数据的 Json 序列化过程中使用的是 alibaba 的 fastjson 而不是 Jackson。因此,你需要使用 @JSONField(serialize = false) 注解来代替 @JsonIgnore,以确保在返回 JSON 数据时该属性不被序列化。总结来说,当使用 alibaba 的 fastjson 时,应使用 @JSONField(serialize = false) 注解替代 @JsonIgnore。
举个例子,在 controller 中返回 JSON 数据时,如果不希望某些属性返回给前端,可以在实体属性上添加 @JSONField(serialize = false) 注解来避免返回。比如,可以使用 @JSONField(serialize = false) private String password 来防止密码属性被序列化并返回给前端。
需要注意的是,解决方案可能取决于你使用的 Jackson 版本。如果你使用的是 1.9 版本之后的 Jackson,可以给实体类属性添加 @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) 注解,并指定访问权限为 WRITE_ONLY,以确保该属性只在写入时生效,而在读取时忽略。例如,可以使用 @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String password 来实现这个功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [爪哇基础 之 @JsonIgnore 注解](https://blog.csdn.net/qq_39052513/article/details/109645885)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [springboot 实体类使用@JsonIgnore属性后无法接收前端参数的完美解决方法](https://blog.csdn.net/zhouzhiwengang/article/details/113399751)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文