Ajax 看不到后控制器



我发出了ajax请求,但它没有看到需要处理请求的Post Controller。但是,如果我将POST更改为GET-GET-Controller,则可以处理ajax请求。

我的岗位管理员:

@RestController
public class AddProductController extends AbstractController {
private static final long serialVersionUID = 5023867691534917359L;
private static final Logger LOGGER = LoggerFactory.getLogger(AddProductController.class);
@PostMapping("/ajax/json/product/add")
public ShoppingCart addProductToCart(HttpServletRequest req,
@RequestParam(name = "idProduct") String idProduct,
@RequestParam(name = "count") String count)  {
ProductForm productForm = createProductForm(idProduct, count); 
ShoppingCart shoppingCart = SessionUtil.getCurrentShoppingCart(req); // Get ShoppingCart
orderService.addProductToShoppingCart(productForm, shoppingCart); // Add product in Cart
return shoppingCart;
}

Ajax请求:

var addProductToCart = function (){
var idProduct = $('#addProductPopup').attr('data-id-product');
var count = $('#addProductPopup .count').val();
var btn = $('#addToCart');
convertButtonToLoader(btn, 'btn-primary');
$.ajax({
url : '/ajax/json/product/add',
method : 'POST',
data: {
idProduct : idProduct,
count : count
},
success : function(data) {
$('#currentShoppingCart .total-count').text(data.totalCount);
$('#currentShoppingCart .total-cost').text(data.totalCost);
$('#currentShoppingCart').removeClass('hidden');
convertLoaderToButton(btn, 'btn-primary', addProductToCart);
$('#addProductPopup').modal('hide');
},
error : function(xhr) {
convertLoaderToButton(btn, 'btn-primary', addProductToCart);
if (xhr.status == 400) {
alert(xhr.responseJSON.message);
} else {
alert('Не сработала JS функция добавления в коризну');
}
}
});
};   

我的PostController出了什么问题?

Jquery.ajax不会像对GET数据那样自动为您编码POST数据。Jquery希望您的数据被预先格式化,以附加到直接通过连线发送的请求正文中。

一个解决方案是使用jQuery.param函数来构建一个查询字符串,以处理POST请求。

将方法中的数据对象更改为以下格式,希望它能起作用。

data: jQuery.param({ idProduct : idProduct, count : count }),
contentType: 'application/x-www-form-urlencoded; charset=UTF-8'

如下更改ajax。您不需要发送data,因为您不希望在您的后控制器中的body中有数据。

$.ajax({
url : '/ajax/json/product/add?idProduct='+idProduct+'&count='+count,
method : 'POST',
success : function(data) {
$('#currentShoppingCart .total-count').text(data.totalCount);
$('#currentShoppingCart .total-cost').text(data.totalCost);
$('#currentShoppingCart').removeClass('hidden');
convertLoaderToButton(btn, 'btn-primary', addProductToCart);
$('#addProductPopup').modal('hide');
},
error : function(xhr) {
convertLoaderToButton(btn, 'btn-primary', addProductToCart);
if (xhr.status == 400) {
alert(xhr.responseJSON.message);
} else {
alert('Не сработала JS функция добавления в коризну');
}
}
});