缺少必需的请求正文:public org.springframework.web.servlet.ModelAndView

时间:2016-08-09 09:37:32

标签: javascript java spring

我询问如何从本地存储发送信息到春天,没有回答https://stackoverflow.com/questions/38827432/send-array-from-local-storage-to-spring,所以我试图这样做,出现了新的问题 截至目前JS看起来像:

function sendToJavaBuy() {
    cartWhisky = JSON.parse(localStorage.getItem("shoppingCart"));
    var newArray = [];
    var i = 0;
    for(i in cartWhisky){
        newArray[i] = cartWhisky[i].name +"_"+ cartWhisky[i].quantity;
        i++;
        console.log("newArray[i]"+newArray);

    }
        $.ajax({
            headers: {
                "Accept": "application/json",
                "Content-Type": "application/json"
            },
            type: "POST",
            data :
                JSON.stringify(newArray),
            url: 'buySuccessfulWhisky',

            success: function (msg) {
                window.location.href = "buySuccessfulWhisky";
                //console.log(data)
            }
        });
 }

爪哇:

  @RequestMapping(value = "buySuccessfulWhisky", method ={RequestMethod.GET, RequestMethod.POST})
    public ModelAndView view(@RequestBody List<String> newArray) {
        System.out.println(newArray);
        System.out.println();
        for(String properties:newArray) {
            String[] split = properties.split("_");
            String name = split[0];
            Integer quantity = Integer.valueOf(split[1]);
            System.out.println("name:= "+name);
            System.out.println("quantity:= "+quantity);

//        whiskyService.changeInfoInDB(name, quantity);
        }
        List<WhiskyDTO> whiskyDTOs =whiskyService.seeAllWhisky();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("viewAvailableWhisky", whiskyDTOs);
        modelAndView.setViewName("whisky");
        return modelAndView;
    }
   }

我在UI上看到一个例外: 我读过论坛,但无法理解我该怎么办这个错误。

  

Whitelabel错误页面

     

这个应用程序没有/ error的显式映射,所以你看到了   这是一个后备。

     
      
  • Tue Aug 09 12:11:39 EEST 2016出现意外错误(type = Bad Request,status = 400)。缺少必需的请求正文:   public org.springframework.web.servlet.ModelAndView
      com.example.controller.buy.SuccessfulBuyWhiskey.view(java.util.List中)
  •   

enter image description here

也许我有问题,因为这个: 我从JS <​​/ p>表到HTML
var cartArray = listCart();
var table ='';
displayShow();

function displayShow() {
    table = '';
    for(var r in cartArray){
        table +='<tr><td width="50"><img src="' + cartArray[r].photo + '" width=35 height=80></td>\
        <td width="100">'+cartArray[r].name+'</td>\
        <td width="150">'+cartArray[r].describe+'</td>\
        <td width="100">\
        <table width="80"><td align="right"><button class="minus" data-name="'+cartArray[r].name+'">-</button></td>\
        <td align="center"> '+cartArray[r].quantity +'</td>\
        <td align="left"><button class="plus" data-name="'+cartArray[r].name+'">+</button></td></tr></table>\
        </td>\
            +<td width="50" align="center">'+cartArray[r].price+'</td>\
            +<td width="80">' + cartArray[r].total + '</td>\
            +<td width="50"><button class="deleteItem" data-name="'+cartArray[r].name+'">X</button></td></tr>';
    }
    $('#trash').html(table);
    $("#totalCart").html(totalPriceInCart());
}

3 个答案:

答案 0 :(得分:0)

我找到答案,问题出在js,新代码:

  cartWhisky = JSON.parse(localStorage.getItem("shoppingCart"));
    var newArray = [];
    var i = 0;
    for (i in cartWhisky) {
        newArray[i] = cartWhisky[i].name + "_" + cartWhisky[i].quantity+"_"+cartWhisky[i].photo;
        i++;
    }
    $.ajax({
        headers: {
            "Accept": "application/json",
            "Content-Type": "application/json"
        },
        type: "POST",
        url: '/buySuccessfulWhisky',
        data:

        JSON.stringify(newArray),
        success: function (msg) {
            window.location.href = "warehouseWhisky";

答案 1 :(得分:-1)

您可能在控制器映射中缺少正斜杠

更改@RequestMapping(value = "buySuccessfulWhisky", method ={RequestMethod.GET, RequestMethod.POST})

@RequestMapping(value = "/buySuccessfulWhisky", method= RequestMethod.POST)

希望有效

答案 2 :(得分:-1)

在你的情况下,为什么不在ajax中发送整个cartWhisky对象。在java中创建一个包含字段namequantity的类。为类创建getter和setter以及daffault构造函数,您不必执行JSON.stringify(cartWhisky)

您可以直接:data : cartWhisky

在您的控制器中,您可以:

public ModelAndView view(@RequestBody List<CartWhisky> newArray) { ..

现在课程应该是这样的:

public class CartWhisky { 
   private String name;
   private String quantity;

   public CartWhisky(){
   }

   public setName(String name){
      this.name = name;
   }
   public getName(){
      return this.name;
   }
   public setQuantity(String quantity){
      this.quantity = quantity;
   }
   public getQuantity(){
      return this.quantity;
   }
 ...
}

如果您没有指定任何其他构造函数,则默认情况下会创建此构造函数,但如果您这样做,则必须创建一个默认构造函数(看起来像示例中的构造函数)。

您还可以拥有其他字段,方法和构造函数,但需要使用。