关于json@RequestBody 不存在属性导致问题

问题:调接口时候发现接口没有bean的属性参数导致JSON转换出错,如下图:
在这里插入图片描述

发现

在这里插入图片描述
排查如下:
首先发现
1.RefundCommonModifyApplyReq这个类的确没有存在属性:showCommissionOption;
2.首页原来售后接口没有发现该问题;
问题定位:
1.前端的确多传了属性;
2.admin接口没有忽略或过滤多传的属性导致出错;

问题处理:
1.原来前端没有这个属性去掉;
2.后端框架加上配置过滤到在注入bean的时候自动忽略不存在的属性,如下:
添加类:
在这里插入图片描述

package com.yunji.customerservice.admin.util;
 
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.stereotype.Component;
 
/**
 * @Auther: csh
 * @Date: 2020/4/29 15:02
 * @Description:
 */
@Component("jacksonObjectMapper")
public class JacksonObjectMapper extends ObjectMapper {
    public JacksonObjectMapper() {
        this.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }
}

在这里插入图片描述
在这里插入图片描述

<!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射 -->
<mvc:annotation-driven>
   <mvc:message-converters>
      <bean class="org.springframework.http.converter.StringHttpMessageConverter">
         <property name="supportedMediaTypes">
            <list>
               <value>text/plain;charset=UTF-8</value>
               <value>text/html;charset=UTF-8</value>
            </list>
         </property>
      </bean>
      <ref bean="jacksonObjectMapper"/>
   </mvc:message-converters>
</mvc:annotation-driven>
<bean id="jacksonObjectMapper" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
      <property name="objectMapper" ref="objectMapper" />
</bean>
 
<bean id="objectMapper" class="com.yunji.customerservice.admin.util.JacksonObjectMapper" />

解释一下为啥要后端来做过滤,不前端直接去掉属性就可以了,因为在日常开发过程中,可能会存在前端多传属性的场景,如果因为多传就导致接口不通或失败,这个是不合理的,所以必须后端做一些过滤,否则可能会影响整体对接速度和可能会出现各种问题;

有更好方案的大神请提出建议,感谢!~~~

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐