gpt4 book ai didi

java - jackson 反序列化器 - 获取模型字段注释列表

转载 作者:搜寻专家 更新时间:2023-11-01 02:39:28 24 4
gpt4 key购买 nike

我正在开发一个 java spring mvc 项目。我创建了 CustomObjectMapper 类,它扩展了 ObjectMapper 表单 jackson。我还在 spring 配置中设置了 CustomObjectMapper,所以每次 jackson 想要 serializedeserialize 时,我的 CustomObjectMapper 都会工作一切都是对的。但是我有一个问题:

我创建了一个自定义注释 @AllowHtml 并将其放在模型中一些 String 字段的顶部。我还以这种方式创建了一个 JsonDeserializerString 类:

public class JsonDeserializerString extends JsonDeserializer<String>{

@Override
public String deserialize(JsonParser jp, DeserializationContext dc) throws IOException, JsonProcessingException {

return jp.getText();
}

}

我在 CustomObjectMapper 中以这种方式设置了这个反序列化器:

@Component
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper(){
SimpleModule module = new SimpleModule();
module.addDeserializer(String.class, new JsonDeserializerString());
this.registerModule(module);
}
}

这按预期工作,当用户提交表单时,每个字符串字段都使用 JsonDeserializerString 反序列化。但我想在反序列化器中获取字段注释。。其实我想,如果一个字符串字段在模型中有一定的注解,做一些逻辑。我该怎么做?

最佳答案

您的反序列化器可以实现 ContextualDeserializer 并提取属性注释。您可以将它存储在私有(private)属性中,并在反序列化 String 时重用它。

示例:

public class EmbeddedDeserializer 
extends JsonDeserializer<Object>
implements ContextualDeserializer {

private Annotation[] annotations;

@Override
public JsonDeserializer<?> createContextual(final DeserializationContext ctxt,
final BeanProperty property) throws JsonMappingException {

annotations = property.getType().getRawClass().getAnnotations();

return this;
}

@Override
public Object deserialize(final JsonParser jsonParser,
final DeserializationContext context)
throws IOException, JsonProcessingException {

if (annotations contains Xxxx) { ... }
}
}

希望对你有帮助。

关于java - jackson 反序列化器 - 获取模型字段注释列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37564216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com