[英]How to automatically parse spring form data to json object? (Spring, jQuery, AJAX, JSON)
我有一个通过Ajax提交的春季表格。 这是我的表格
<form:form action="addToCart" method="POST"
modelAttribute="cartProduct">
<form:input type="hidden" path="product.productId"
value="${inventory.getProduct().getProductId()}" />
<div class="card-block" style="overflow: hidden; padding: 2%">
<h5 style="white-space: nowrap">
<a href="#" class="text-primary card-title">${inventory.getProduct().getName()}</a>
</h5>
<p class="card-text text-danger">₱
${inventory.getProduct().getPrice()}</p>
<p>
<div class="success-message-container">
<span class="text-success add-to-cart"><strong> </strong></span>
</div>
<div class="success-message vertical-center"
style="display: none;">
<span class="text-success add-to-cart"><strong>Added
to cart!</strong></span>
</div>
<form:button id="addToCart" class="btn btn-block btn-warning">Add to cart</form:button>
<a id="viewCart" href="viewCart" class="btn btn-block btn-warning" style="display: none;">View cart</a>
</div>
</form:form>
然后通过ajax代码提交...
$(document).ready(function() {
var form = $("form");
var url = form.attr("action");
var formMethod = form.attr("method");
form.submit(function(event) {
event.preventDefault();
var thisForm = this;
$.ajax({
url : url,
data : $(this).serialize(),
type : "POST",
headers: {
'Content-Type': 'application/json'
},
success : function(cartProduct) {
$(thisForm).find('.success-message-container').remove();
$(thisForm).find('.success-message').show();
$(thisForm).find('#addToCart').hide();
$(thisForm).find('#viewCart').toggle();
}
});
});
});
});
这是接收休息控制器...
@RequestMapping(value="/addToCart", method = RequestMethod.POST)
public CartProduct addToCart(@RequestBody CartProduct cartProduct, HttpServletRequest request){
System.out.println(cartProduct.getProduct().getProductId());
return null;
}
但是,我不断收到此错误...
POST http://localhost:8080/tommystore/customer/addToCart 400 (Bad Request)
我已经导入了Jackson以进行自动对象映射,但是它仍然无法正常工作...
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.3</version>
</dependency>
我怎样才能解决这个问题?
Spring使用HttpMessageConverter将请求主体转换为方法参数。 有两种格式(json或xml,我更喜欢json)HttpMessageConverter负责从HTTP请求消息转换为对象以及从对象转换为HTTP响应主体。 使用HttpMessageConverter时,应将dataType: 'xml'
或添加到ajax并将数据格式更改为xml
在服务器中,配置XML Converter以将xml数据转换为对象
@Configuration
@ComponentScan({ "yourpackage" })
public class WebConfig extends WebMvcConfigurerAdapter
{
@Override
public void configureMessageConverters(
List<HttpMessageConverter<?>> converters) {
messageConverters.add(createXmlHttpMessageConverter());
messageConverters.add(new MappingJackson2HttpMessageConverter());
super.configureMessageConverters(converters);
}
private HttpMessageConverter<Object> createXmlHttpMessageConverter() {
MarshallingHttpMessageConverter xmlConverter =
new MarshallingHttpMessageConverter();
XStreamMarshaller xstreamMarshaller = new XStreamMarshaller();
xmlConverter.setMarshaller(xstreamMarshaller);
xmlConverter.setUnmarshaller(xstreamMarshaller);
return xmlConverter;
}
}
在您的XML上下文中,注册您的转换器
<context:component-scan base-package="your package" />
<mvc:annotation-driven>
<mvc:message-converters>
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
<property name="marshaller" ref="xstreamMarshaller" />
<property name="unmarshaller" ref="xstreamMarshaller" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="xstreamMarshaller" class="com.fasterxml.jackson.core" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.