Javascript AJAX/springmvc:POST请求中以括号表示的JSON对象呈现

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”) 未检测到公共重

当绑定到Web请求时,为什么JSON会以括号表示?

我有一个应用程序,可以连续调用两个REST控制器

首先,从表单读取地址,将其序列化,并将其转换为验证端点,然后作为响应对象负载返回到UI/JS。这部分很好用

$.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..
}