Javascript AJAX/springmvc:POST请求中以括号表示的JSON对象呈现
当绑定到Web请求时,为什么JSON会以括号表示? 我有一个应用程序,可以连续调用两个REST控制器 首先,从表单读取地址,将其序列化,并将其转换为验证端点,然后作为响应对象负载返回到UI/JS。这部分很好用Javascript AJAX/springmvc:POST请求中以括号表示的JSON对象呈现,javascript,java,jquery,ajax,spring-mvc,Javascript,Java,Jquery,Ajax,Spring Mvc,当绑定到Web请求时,为什么JSON会以括号表示? 我有一个应用程序,可以连续调用两个REST控制器 首先,从表单读取地址,将其序列化,并将其转换为验证端点,然后作为响应对象负载返回到UI/JS。这部分很好用 $.ajax({ 方法:“POST”, url:“/validate shipping address”, 数据:$shippingInfoForm.serialize() } @PostMapping(path=“/validate shipping address”) 未检测到公共重
$.ajax({
方法:“POST”,
url:“/validate shipping address”,
数据:$shippingInfoForm.serialize()
}
@PostMapping(path=“/validate shipping address”)
未检测到公共重新响应
我已经通读了,和,这为上述尝试提供了信息
目前,我已经用JSON.stringify和Gson(上面的选项2)解决了这个问题,但我更愿意让SpringMVC自动完成这项工作
解决办法:
$.ajax({
方法:“POST”,
url:“/commercial checkout/shipping stuff”,
数据:{
“shippingAddress”:JSON.stringify(shippingAddress),
“发货日期”:发货日期,
“csrfToken”:csrfToken
}
});
@PostMapping(path=“/shipping stuff”)
公共厕所卫生署(//
@RequestParam(name=“shippingAddress”)字符串shippingAddressJson,
@RequestParam(name=“shipDate”)@DateTimeFormat(pattern=“yyyy-MM-dd”)Date shipDate){
Address Address=gson.fromJson(shippingAddressJson,AddressImpl.class);
}
根据您的评论
我还尝试将整个AJAX负载串接起来,并使用
@控制器中包装器对象上的RequestBody,但调用
由于未检测到csrfToken,因此失败
当您使用@RequestBody时,您需要创建相应的POJO对象来反序列化JSON。此外,您还需要在AJAX中添加content-type属性,以指示您正在发送JSON的服务器
$.ajax({
method: 'POST',
data: 'json',
content-type: 'application/json',
url: '/commercial-checkout/shipping-stuff',
data: {
"shippingAddress": JSON.stringify(shippingAddress),
"shipDate": shipDate,
"csrfToken": csrfToken
}
});
如我所述,添加一个POJO
public class AddressPOJO {
shippingAddress,
shipDate,
csrfToken
//getter / setters
}
修改控制器方法
@PostMapping(path = "/shipping-stuff", consumes = "application/json")
public RestResponse<?> doShippingStuff( @RequestBody AddressPOJO addressPJO) {
// do your logic..
}
@PostMapping(path=“/shipping stuff”,consumes=“application/json”)
公共response doshippingstaff(@RequestBody AddressPOJO addressPJO){
//按你的逻辑去做。。
}
感谢您的回复。我确实尝试了此版本,但包装器对象中没有包含csrfToken。我也没有设置内容类型。我会用它再试一次,看看是否有效。
public class AddressPOJO {
shippingAddress,
shipDate,
csrfToken
//getter / setters
}
@PostMapping(path = "/shipping-stuff", consumes = "application/json")
public RestResponse<?> doShippingStuff( @RequestBody AddressPOJO addressPJO) {
// do your logic..
}