一尘不染

可以将Jackson配置为修剪所有字符串属性中的前导/尾随空格吗?

spring-mvc

JSON示例(请注意,该字符串具有尾随空格):

{ "aNumber": 0, "aString": "string   " }

理想情况下,反序列化的实例将具有 aString 属性,其值为 “ string”
(即,没有尾随空格)。这似乎是受支持的东西,但我找不到(例如在 DeserializationConfig.Feature中 )。

我们使用的是Spring MVC 3.x,因此基于Spring的解决方案也可以。

我尝试根据论坛帖子中的建议配置Spring的WebDataBinder,但是在使用Jackson消息转换器时,它似乎不起作用:

@InitBinder
public void initBinder( WebDataBinder binder )
{
    binder.registerCustomEditor( String.class, new StringTrimmerEditor( " \t\r\n\f", true ) );
}

阅读 694

收藏
2020-06-01

共1个答案

一尘不染

使用自定义解串器,您可以执行以下操作:

 <your bean>
 @JsonDeserialize(using=WhiteSpaceRemovalSerializer.class)
 public void setAString(String aString) {
    // body
 }

 <somewhere>
 public class WhiteSpaceRemovalDeserializer extends JsonDeserializer<String> {
     @Override
     public String deserialize(JsonParser jp, DeserializationContext ctxt) {
         // This is where you can deserialize your value the way you want.
         // Don't know if the following expression is correct, this is just an idea.
         return jp.getCurrentToken().asText().trim();
     }
 }

此解决方案确实暗示将始终以这种方式序列化该bean属性,并且您将必须注释要以这种方式反序列化的每个属性。

2020-06-01