当Spring MVC找到与URL路径匹配的请求映射,但参数(或标头或其他内容)与处理程序方法期望的不匹配时,通常会看到这种类型的错误。
如果使用@RequestBody批注,则Spring MVC希望将POST请求的整个主体映射到Object,默认情况下,它不使用String。
可以采用以下几种不同的方法:
1) 将deleteUser()方法类型的方法类型更改为GET而不是Post,并使用userId作为String。
2) 您只需将HttpServletRequest注入您的方法并读取正文:
public void deleteUser(HttpServletRequest request) { String userID = IOUtils.toString( request.getInputStream()); // do stuff}3) 使用可以替换String参数的包装器(JSON对象的Java模型),这也可以与帖子中的json一起正常工作。
public class UserWrapper { private String userId; //getter setters然后在您的控制器中用作:
public void deleteUser(@RequestBody UserWrapper user) {//do your stuff}4) Spring提供了一种配置多个消息转换器的方法,如下所示: 注意: 然后,对各种方法的请求必须使用适当的值指定“ content-
type”标头。对于那些将请求主体映射到JAXB bean的方法,请指定“ application /
xml”。对于那些请求主体是字符串的用户,请使用“文本/纯文本”。
<bean > <property name="messageConverters"> <list> <ref bean="jsonConverter" /> <ref bean="marshallingConverter" /> <ref bean="stringHttpMessageConverter" /> </list> </property></bean><bean id="jsonConverter" > <property name="supportedMediaTypes" value="application/json" /></bean><bean id="marshallingConverter" > <constructor-arg ref="jaxb2Marshaller" /> <property name="supportedMediaTypes" value="application/xml"/></bean><bean id="stringHttpMessageConverter" > <property name="supportedMediaTypes" value="text/plain"/></bean>
希望这对您有所帮助!



