springboot中使用@RequestBody MultiValueMap 總是報(bào)400,415錯(cuò)誤-關(guān)于流程引擎flowable
第一步:報(bào)錯(cuò)代碼舉例
在Spring boot 中使用 @RequestBody 會(huì)報(bào)錯(cuò),提示錯(cuò)誤 Content type ‘a(chǎn)pplication/x-www-form-urlencoded;charset=UTF-8’ not supported,代碼如下:
@RequestMapping(value = "/act/service/model/{modelId}/save", method = RequestMethod.POST)
public void saveModel(@PathVariable String modelId, @RequestBody MultiValueMap<String, String> values) {
// 具體業(yè)務(wù)處理邏輯代碼
}
第二步:報(bào)錯(cuò)原因分析
這個(gè)在傳統(tǒng) spring MVC 中是有效的,但是在 Spring boot 中會(huì)報(bào)錯(cuò)。
傳統(tǒng)是 Spring MVC 有效,是因?yàn)橛?mvc:annotation-driven 注解,查資料,mvc:annotation-driven 注解配置了如下的內(nèi)容
spring 3.1 版本:
這個(gè)找到的資料是 3.1 的,
但是我們注意下面最后一行配置
但是我們注意下面最后一行配置
<!-- 注解請(qǐng)求映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<ref bean="logNDCInteceptor"/> <!-- 日志攔截器,這是你自定義的攔截器 -->
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="byteArray_hmc" />
<ref bean="string_hmc" />
<ref bean="resource_hmc" />
<ref bean="source_hmc" />
<ref bean="xmlAwareForm_hmc" />
<ref bean="jaxb2RootElement_hmc" />
<ref bean="jackson_hmc" />
</list>
</property>
</bean>
<bean id="byteArray_hmc" class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /><!-- 處理.. -->
<bean id="string_hmc" class="org.springframework.http.converter.StringHttpMessageConverter" /><!-- 處理.. -->
<bean id="resource_hmc" class="org.springframework.http.converter.ResourceHttpMessageConverter" /><!-- 處理.. -->
<bean id="source_hmc" class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /><!-- 處理.. -->
<bean id="xmlAwareForm_hmc" class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" /><!-- 處理.. -->
<bean id="jaxb2RootElement_hmc" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" /><!-- 處理.. -->
<bean id="jackson_hmc" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /><!-- 處理json-->
第三步:找到問題
但是我們注意上面最后一行配置
但是我們注意上面最后一行配置
但是我們注意上面最后一行配置文章來源:http://www.zghlxwxcb.cn/news/detail-583400.html
最后一個(gè)配置了 Jackson 的 json 處理程序,
在更新的版本中,AnnotationMethodHandlerAdapter 已經(jīng)廢棄,
使用的是 RequestMappingHandlerAdapter,
看下 RequestMappingHandlerAdapter 的源碼。
public RequestMappingHandlerAdapter() {
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter();
stringHttpMessageConverter.setWriteAcceptCharset(false); // see SPR-7316
this.messageConverters = new ArrayList<HttpMessageConverter<?>>(4);
this.messageConverters.add(new ByteArrayHttpMessageConverter());
this.messageConverters.add(stringHttpMessageConverter);
this.messageConverters.add(new SourceHttpMessageConverter<Source>());
this.messageConverters.add(new AllEncompassingFormHttpMessageConverter());
}
第四步:解決方法-增加配置類增加對(duì)應(yīng)數(shù)據(jù)格式的處理Bean
這里面沒有了 json 的處理過程,我們把它加上文章來源地址http://www.zghlxwxcb.cn/news/detail-583400.html
@EnableWebMvc
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Bean
public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
RequestMappingHandlerAdapter adapter = new RequestMappingHandlerAdapter();
List<HttpMessageConverter<?>> converters = adapter.getMessageConverters();
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
List<MediaType> supportedMediaTypes = new ArrayList<MediaType>();
MediaType textMedia = new MediaType(MediaType.TEXT_PLAIN, Charset.forName("UTF-8"));
supportedMediaTypes.add(textMedia);
MediaType jsonMedia = new MediaType(MediaType.APPLICATION_JSON, Charset.forName("UTF-8"));
supportedMediaTypes.add(jsonMedia);jsonConverter.setSupportedMediaTypes(supportedMediaTypes);
converters.add(jsonConverter);
adapter.setMessageConverters(converters);
return adapter;
}
}
到了這里,關(guān)于【springboot中使用@RequestBody MultiValueMap 總是報(bào)400,415錯(cuò)誤-關(guān)于流程引擎flowable】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!