Spring Controller 建议修剪 JSON 数据

Posted

技术标签:

【中文标题】Spring Controller 建议修剪 JSON 数据【英文标题】:Spring Controller Advice to Trim JSON Data 【发布时间】: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 【参考方案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();
  

【讨论】:

以上是关于Spring Controller 建议修剪 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将javascript(js)映射传递给spring boot Controller?

如何从(.js)文件发送ajax请求到Spring MVC Controller?

Spring MVC注解Controller源码流程解析--映射建立

Discord.JS 修剪命令还修剪用户引脚

如何从 Spring MVC 中的请求参数中修剪空格

spring boot 扫描不到自定义的Controller。。。