【问题标题】:Spring Controller Advice to Trim JSON DataSpring Controller 建议修剪 JSON 数据
【发布时间】:2017-03-03 23:22:31
【问题描述】:

found an answer 与此问题类似,但在发布 JSON 数据时它不起作用。我有以下内容:

@ControllerAdvice
public class ControllerConfig {

    @InitBinder
    public void initBinder ( WebDataBinder binder ) {
        StringTrimmerEditor stringtrimmer = new StringTrimmerEditor(true);
        binder.registerCustomEditor(String.class, stringtrimmer);
    }
}

我知道在绑定期间通过调试到达了代码,但是当我传入如下数据时:

{ "companyId": "    ABC     "}

ABC 在绑定过程中实际上并没有被修剪。我的猜测是,这只适用于请求参数而不是原始 JSON 主体,但不确定。如果是这样的话,我可以做类似的事情吗?

【问题讨论】:

  • 我想你会创建 Jackson Deserializer

标签: json spring spring-mvc spring-boot trim


【解决方案1】:

创建这个 JsonDeserializer

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();
     }
 }

并将其设置为您的属性

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

【讨论】:

    【解决方案2】:

    试试这个, 创建一个类。 使用 @JsonComponent 注释类 扩展 JsonDeserializer 并且,在覆盖的方法中添加您的修剪逻辑,

    这将自动修剪 json 请求中的空格,当它到达控制器时,不需要外部属性来激活它。

    @JsonComponent
    public class WhiteSpaceRemover extends JsonDeserializer<String> {
    
      @Override
      public String deserialize(JsonParser arg0, DeserializationContext arg1)
            throws IOException, JsonProcessingException {
        return arg0.getValueAsString().trim();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2013-09-04
      • 2014-07-25
      • 1970-01-01
      相关资源
      最近更新 更多