0

我正在尝试收集所有表单数据并将其作为 XML 发送到控制器。这个 XML 将被进一步发送到后端,后端会处理它。
JAXBMarshaller 期望为编组传入的 xml 定义一个 bean。但我没有。
要求

$('form').submit(function () {
                    $.ajax({
                        url: $(this).attr('action'),
                        type: 'POST',
                        processData: false,
                        data: collectFormData1(),
                        headers: {
                            "Content-Type":"application/xml"
                        },
                        dataType: 'application/xml',
                        success: function (data) {
                            alert('Success:'+data)
                        },
                        error: function (jqXHR, textStatus, errorThrown) {
                            console.log('jqXHR:'+jqXHR+'\n'+'textStatus:'+'\n'+textStatus+'errorThrown:'+errorThrown);
                        }
                    });

                    return false;
                });
function collectFormData1()
            {
                //$rootElement = $('<FormXMLDoxument/>');
                xmlDoc = document.implementation.createDocument("", "", null);
                root = xmlDoc.createElement($('form').attr('name'));
                $('form').find('div.section').each(function(index, section) {
                    sectionElement = xmlDoc.createElement($(section).attr('name'));
                    //xmlDoc.appendChild(sectionElement);
                    $(section).find('input').each(function(i, field) {
                        fieldElement  = xmlDoc.createElement($(field).attr('name'));
                        fieldText=xmlDoc.createTextNode($(field).val());
                        fieldElement.appendChild(fieldText);
                        sectionElement.appendChild(fieldElement);
                    });
                    root.appendChild(sectionElement);
                });
                xmlDoc.appendChild(root);
                console.log((new XMLSerializer()).serializeToString(xmlDoc));
                return xmlDoc;                  
            }

控制器

@RequestMapping(value="/save",method=RequestMethod.POST,consumes={"application/json", "application/xml", "text/xml"})
        @ResponseBody public String handleSave(@RequestBody String formData)
        {

            System.out.println("comes here");
            System.out.println(formData);//prints the form xml
return "<response>Success</response>";

    } 
4

1 回答 1

1

这很可能是由于缺少可以编组/解组 xml的HttpMessageConverter 。

spring-oxm如果您还没有这样做,请添加。

如果您使用类路径扫描,也可以@EnableWebMvc在您的组件中使用。 如果没有,请添加配置以启用默认转换器。@Configuration
<mvc:annotation-driven/>

http://hillert.blogspot.com/2011/01/rest-with-spring-contentnegotiatingview.html

更新


尝试添加produces={"application/xml"}@RequestMapping.

如果它是一个简单的 xml 字符串,需要作为响应正文返回,您可以使用 HttpServletResponse.getWriter(),如如何从 Spring MVC 中的表单帖子返回简单的 xml 字符串或返回ResponseEntity<String>包含 xml 中的说明。

@RequestMapping(value="/save",method=RequestMethod.POST,consumes={"application/json", "application/xml", "text/xml"})
@ResponseBody public ResponseEntity<String> handleSave(@RequestBody String formData)
{

    System.out.println("comes here");
    System.out.println(formData);//prints the form xml

    return new ResponseEntity<String>("<response>Success</response>", HttpStatus.OK);
}
于 2013-08-12T13:58:45.627 回答