Je demande comment envoyer des informations du stockage local au printemps, il n'y a pas eu de réponse https: //stackoverflow.com/questions/38827432/send-array-from-local-storage-to-spring, j'ai donc essayé de le faire de cette façon et les nouveaux problèmes sont apparus À partir de maintenant, JS ressemble à ceci:

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)
            }
        });
 }

Java:

  @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;
    }
   }

Je vois une exception sur l'interface utilisateur: je lis le forum, mais je ne comprends pas ce que je peux faire avec cette erreur.

Page d'erreur Whitelabel

Cette application n'a pas de mappage explicite pour / error, vous voyez donc cela comme un repli.

  • Tue Aug 09 12:11:39 EEST 2016 Une erreur inattendue s'est produite (type = Bad Request, status = 400). Le corps de demande requis est manquant: org.springframework.web.servlet.ModelAndView public
    com.example.controller.buy.SuccessfulBuyWhiskey.view (java.util.List)

enter image description here

Peut-être que j'ai des problèmes à cause de cela: je fais du tableau en HTML à partir de JS

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());
}
0
Viking 9 août 2016 à 12:37

3 réponses

Meilleure réponse

Je trouve la réponse, le problème était en js, nouveau code:

  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";
0
Viking 12 août 2016 à 04:43

Il se peut que vous manquiez une barre oblique dans le mappage de votre contrôleur

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

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

J'espère que ça marche

-1
Sumit Badaya 9 août 2016 à 11:57

Dans votre cas, pourquoi n'envoyez-vous pas l'intégralité de l'objet cartWhisky dans l'ajax. En java, créez une classe contenant des champs: name et quantity. Créez des getters et setters et un constructeur daffault pour la classe et vous n'avez pas à faire JSON.stringify(cartWhisky).

Vous pouvez directement: data : cartWhisky.

Dans votre contrôleur, vous pouvez:

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

Maintenant, la classe devrait ressembler à ceci:

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

Ce constructeur est créé par défaut si vous ne spécifiez aucun autre constructeur mais si vous le faites, vous devez en créer un par défaut (qui ressemble à celui de l'exemple).

Vous pouvez également avoir d'autres champs, méthodes et constructeurs mais ceux-ci sont obligatoires.

-1
Lazar Lazarov 10 août 2016 à 06:49