Spring JsonDeserializer不适用于字符串类型

编程入门 行业动态 更新时间:2024-10-18 14:22:34
本文介绍了Spring JsonDeserializer不适用于字符串类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我需要从任何对象中的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不适用于字符串类型

本文发布于:2023-11-30 17:36:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1650917.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   不适用于   类型   Spring   JsonDeserializer

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!