我有一个 Dropwizard 应用程序,其中包含一堆已发布的 API。我需要从传入的字符串值(例如地址、名称)中去除尾随/前导空格以及回车符、制表符等。我考虑配置一个 JSON 反序列化器来执行此操作,而不是手动更改每个 API 实现。
我似乎在 jackson 找不到这样的选择。另外,即使我创建一个自定义反序列化器并找到如何在 Dropwizard 应用程序中注册它,似乎每个反序列化器都是根据特定类而不是“全局”配置的。
我的问题是 Jackson 中是否有一个选项可以为任何 java.lang.String 属性(简单的或另一个对象的一部分)或某种全局回调方法配置全局反序列化器,这将允许我检查并可能修改JSON 属性值。
最佳答案
我找到了解决方案。通过实现自定义 JsonDeserializer,您可以操作值。
public class WhitespaceDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return p.getText().trim();
}
然后必须向对象映射器注册反序列化器:
ObjectMapper mapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule().addDeserializer(String.class, new WhitespaceDeserializer());
mapper.registerModule(simpleModule);
比我想象的要多一点工作 - 我希望有一种简单的现有方法可以在某处设置标志,但这确实有效。
关于java - 使用 Jackson 反序列化 JSON 时去除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72705391/