java - 使杰克逊在类的序列化尝试上失败
问题描述
有什么简单的方法可以让杰克逊无法序列化特定的类吗?
基本上我想确保包含一些敏感数据的类不会泄漏到任何地方,并且由于我们同时记录文本和 json,我担心它最终可能会被记录为 json 作为某个更大对象的一部分。(当然我可以让它序列化为*****
字符串,但我认为错误更清楚地表明它甚至不应该在那里使用)。
我现在唯一的想法是自定义 Serizalizer,它只是抛出一个异常,但我想知道是否有一些更简单的方法可以告诉杰克逊远离那个类。
解决方案
public class YourBlackListingSerializer extends StdSerializer<YourPojo> {
public YourBlackListingSerializer() {
this(null);
}
public YourBlackListingSerializer(Class<YourPojo> t) {
super(t);
}
@Override
public void serialize(
Item value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
throw new CustomException("This class can't be serialized");
}
}
这应该有效。
然后注册序列化器
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(YourPojo.class, newYourBlackListingSerializer());
mapper.registerModule(module);
但是,如果您只想忽略这些字段,那么
@JsonIgnore
private String password;
@JsonIgnore
public String getPassword() {
return password;
}
@JsonProperty
public void setPassword(final String password) {
this.password = password;
}
推荐阅读
- php - PHP Curl:为什么 curl_setopt_array() 这两个选项失败?
- javascript - 如何为同一页面上的不同输入和文本区域设置动态字符计数器,每个最大长度不同?
- android - 以编程方式将片段加载到导航中
- awk - 用文件名替换列名
- android - DialogFragment 应该有自己的 ViewModel 还是应该使用包含 Fragment 的 ViewModel?
- google-chrome - 使用映射到本地文件时,Chrome 开发人员工具元素选项卡中的 CSS 更改不会反映在源中
- .net-core - Blazor Core Hosted - Razor 类库项目中的所有组件都在页面上打印为 HTML
- c# - 您如何测试使用反射在不同类上调用方法的方法是否调用正确的类
- typescript - 如何在 Typescript 中编写一个使属性只读的装饰器?
- syncfusion - 如何将 Syncfusion Vue 示例与 Stack blitz 一起使用