所以我正在添加购物车以获得" DVD"存储按钮对我的服务器进行ajax调用以访问检查数据库中是否有足够的DVD库存并将其添加到"购物车"在会话中。我觉得我有#34;电话"是的,但不太确定如何让我的弹簧控制器响应"。我基本上只想要一个带有字段的对象" successStatus"和"消息"返回到ajax以显示给用户。
html中的我的按钮
<form method="post">
<p>Enter quantity you would like to purchase :
<input type="number" id="quantity" name="quantity" step="any" min="1" max="${product.quantityInStock}" value="1"></input>
</p>
<input type="submit" class="btn btn-primary" id="addToCart" name="button" value="Add to cart"/>
<input type="hidden" id="jsonProductId" value='${product.id}'/>
</form>
Ajax调用
$("#addToCart").click(function(event) {
var data = {}
data["productId"] = $("#jsonProductId").val();
data["quantity"] = $("#quantity").val();
$.ajax({
type: "POST",
contentType: "application/json",
url: "addToCart",
data: JSON.stringify(data),
dataType: 'json',
timeout: 600000,
success: function (data) {
//...
},
error: function (e) {
//...
}
});
event.preventDefault();
});
控制器
@Controller
@Scope("session")
public class CartController {
@Autowired
private Cart cart;
@Autowired
ProductService productService;
@RequestMapping(value="/addToCart", method= RequestMethod.POST)
public String searchResults(@RequestBody AddToCartPojo addToCartPojo) {
//do something
}
@RequestMapping(value="/cart", method= RequestMethod.GET)
public String searchResults(Model model) {
model.addAttribute("cartLines",cart.getLines());
model.addAttribute("cartTotalPrice",cart.getTotalPrice());
return "cart";
}
AddToCartPojo
public class AddToCartPojo {
private long productId;
private int quantity;
public long getProductId() {
return productId;
}
public void setProductId(long productId) {
this.productId = productId;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
}
答案 0 :(得分:0)
稍微改变你的控制器
@RestController
@Scope("session")
public class CartController {
@Autowired
private Cart cart;
@Autowired
ProductService productService;
@RequestMapping(value="/addToCart", method= RequestMethod.POST)
public String searchResults(@RequestBody AddToCartPojo addToCartPojo) {
//do something
String responseMessage = "success";
return responseMessage;
}
}
我添加了@RestController
注释而不是@Controller
,它隐式地将@ResponseBody
添加到此类中的每个方法。
@Response Body - 指示方法返回值的注释应绑定到Web 反应机构。支持Servlet环境中带注释的处理程序方法。
无需单独发送状态。而是可以使用HTTP状态。如果你有200则成功。
答案 1 :(得分:0)
如果您使用@Controller
而没有@ResponseBody
,请求由CartController
处理后,响应将返回到具有逻辑视图名称的DispatcherServlet(在您的示例中,它是“cart” )。然后返回视图解析器,根据您的配置准备视图,决定要调用的配置(JSP,Velocity,PDF等)。 (例如,使用cart.jsp页面。)
@ResponseBody - 指示方法返回值的注释应该 受到网络响应机构的约束。支持带注释的处理程序 Servlet环境中的方法。
因此,如果您使用@ResponseBody
响应注释方法将返回到浏览器,并将作为数据参数在success: function(data)
中提供。