这里写自定义目录标题
关于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" />
解释一下为啥要后端来做过滤,不前端直接去掉属性就可以了,因为在日常开发过程中,可能会存在前端多传属性的场景,如果因为多传就导致接口不通或失败,这个是不合理的,所以必须后端做一些过滤,否则可能会影响整体对接速度和可能会出现各种问题;
有更好方案的大神请提出建议,感谢!~~~