Я проверяю ваш код, и он работает.
мой ajxa (такой же как ваш):
var jsonSTr = JSON.stringify({"ddd":"sss", "der":"fvgb"});
var data = {};
data["products"] = jsonSTr;
$.ajax({
type: "POST",
url: '/mastercard/render',
data: JSON.stringify(data),
beforeSend: function (xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
},
}).done(function (data, textStatus, jqXHR) {
console.log(textStatus);
});
мой контроллер (такой же, как ваш с небольшим изменением возвращаемого значения только для теста):
@RequestMapping(value="/mastercard/render", method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ModelAndView renderToMasterCardForm(@RequestBody CheckoutRenderRequest checkoutRenderRequest) {
System.out.println(checkoutRenderRequest.getProducts());
ModelAndView viewModel = new ModelAndView("mastercardform");
viewModel.addObject("result", "Hi");
return viewModel;
}
Моя сущность (такая же, как вы, но измените частный статический класс на общедоступный):
public class CheckoutRenderRequest {
private String products;
public String getProducts() {
return products;
}
public void setProducts(String products) {
this.products = products;
}
}
МОЙ ПОЛНЫЙ КОНТРОЛЛЕР:
@Controller
@RequestMapping(value = "/")
public class Test {
@RequestMapping(value = "/")
public String index() {
return "index";
}
@RequestMapping(value="/mastercard/render", method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ModelAndView renderToMasterCardForm(@RequestBody CheckoutRenderRequest checkoutRenderRequest) {
System.out.println(checkoutRenderRequest.getProducts());
ModelAndView viewModel = new ModelAndView("mastercardform");
viewModel.addObject("result", "Hi");
return viewModel;
}
}
и явызвал ваш ajax на странице index.jsp