我需要从任何对象中的String类型的字段中删除所有特殊字符和控制字符.反序列化器已注册,但在运行时未针对 Strings 执行. 我尝试添加与注释@JsonDeserialize(using = StringProcessorComponent.class)相同的内容,但存在相同的问题. 它适用于任何其他类型,例如Date/Long.如果我想念任何东西,请告诉我.
I have a requirement to strip off all the special characters and control characters from the fields of type String in any of the Objects. Deserializer was registered but never executes during the runtime for Strings. I tried adding the same as an annotation @JsonDeserialize(using = StringProcessorComponent.class), but the same issue. It works for any other type like Date/Long. Please let me know if I am missing any.
这是我的反序列化器.
@JsonComponent public class StringProcessorComponent extends JsonDeserializer<String> { @Override public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { JsonToken currentToken = p.getCurrentToken(); if (currentToken.equals(JsonToken.VALUE_STRING)) { String text = MyStringProcessor.clean(p.getValueAsString()); return text; } return null; } }推荐答案
要覆盖默认反序列器,可以使用SimpleModule.另外,如果您想扩展默认实现,则可以扩展默认反序列化器.您可以扩展com.fasterxml.jackson.databind.deser.std.StringDeserializer类.参见以下示例:
To override default deserialisers you could use SimpleModule. Also, when you want to extend default implementation if possible you can extend default deserialisers. In your case you can extend com.fasterxml.jackson.databind.deser.std.StringDeserializer class. See below example:
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.deser.std.StringDeserializer; import com.fasterxml.jackson.databind.module.SimpleModule; import java.io.IOException; import java.util.StringJoiner; public class JsonApp { public static void main(String[] args) throws Exception { SimpleModule stringModule = new SimpleModule("String Module"); stringModule.addDeserializer(String.class, new CustomStringDeserializer()); ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(stringModule); String json = "{\"firstName\":\" Tom \",\"lastName\":\" Long \"}"; CustomStringPojo customStringPojo = mapper.readValue(json, CustomStringPojo.class); System.out.println(customStringPojo); } } class CustomStringDeserializer extends StringDeserializer { @Override public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { String text = super.deserialize(p, ctxt); //clean up value return text.trim(); } } class CustomStringPojo { private String firstName; private String lastName; // getters, setters, toString }上面的代码显示:
CustomStringPojo{firstName='Tom', lastName='Long'}更多推荐
Spring JsonDeserializer不适用于字符串类型
发布评论