【问题标题】:Spring MVC: Not able to submit form data in JSON formatSpring MVC:无法以 JSON 格式提交表单数据
【发布时间】:2013-07-24 00:28:07
【问题描述】:

执行此操作时出现以下异常。

HandlerMethod details: 
Controller [application.entry.controller.UserController]
Method [public java.lang.String application.entry.controller.UserController.handleSave(java.util.List<java.util.Map<java.lang.String, java.lang.String>>)]

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded' not supported
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:124)[org.springframework.web.servlet-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:91)[org.springframework.web.servlet-3.1.1.RELEASE.jar:3.1.1.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:71)[org.springframework.web.servlet-3.1.1.RELEASE.jar:3.1.1.RELEASE]

控制器类:

@RequestMapping(value="/save", method=RequestMethod.POST)
@ResponseBody public String handleSave(@RequestBody List<Map<String, String>> client)
    {
        Map<String, String> formInputs = new HashMap<String, String>();

        for (Map<String, String> formInput : client) {
            formInputs.put(formInput.get("name"), formInput.get("value"));
        }

我也尝试过@RequestMapping(value="/save", method=RequestMethod.POST, headers = "Accept=application/json"),但错误是一样的。

spring-servlet.xml

<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
     <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
      <list>
        <ref bean="jacksonMessageConverter"/>
      </list>
    </property>
    </bean>

jQuery 提交:

$('form').submit(function () {
                    alert();
                    $.ajax({
                        url: $(this).attr('action'),
                        type: 'POST',
                        data: JSON.stringify($(this).serializeArray()),
                        contentType: 'application/json',
                        success: function (data) {
                            alert('data')
                        },
                        error: function (jqXHR, textStatus, errorThrown) {
                            alert('An error has occured!! :-(')
                        }
                    })

                    return false
                })

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    尝试调整您的 @RequestMapping 以接受 JSON。

    @RequestMapping(
        value="/save", 
        method=RequestMethod.POST, 
        consumes="application/json")
    

    【讨论】:

    • 原始错误表明“不支持内容类型'application/x-www-form-urlencoded'”。为什么添加 consumes="application/json" 可以解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多