0
votes

La méthode http obtenez n'est pas prise en charge par cette erreur de servlet de type URL

Je crée un système de vente simple utilisant JSP AJAX. Lorsque j'ajoute le bouton Ajouter des données, toutes les données de la table HTML sont transmises avec succès à la page de servlet SalesAdd que je vois sur la console Je réveille les données ressemblent à ce format à la page de servlet

[{"item": "chocolat", "pro_price": "32", "Qté": "1", "Total": "32"} , {"item": "mangue", "pro_price": "10", "qté": "1", "total": "10"}] strong> p>

mais les données ne sont pas ajoutées à la base de données et montrer l'erreur comme celle-ci. J'ai écrit l'erreur complète ci-dessous. P>

méthode http obtenez n'est pas pris en charge par cette URL Type Statut Rapport La méthode MessageHTTP Obtenir n'est pas prise en charge par cette URL DescriptionLa méthode HTTP spécifiée n'est pas autorisée pour la ressource demandée. strong> p>

Qu'est-ce que j'ai essayé maintenant, je suis annoncé ci-dessous.Je pense être le problème avec la classe de produit P>

@WebServlet("/salesadd")
public class salesadd extends HttpServlet {
    Connection con;
    PreparedStatement pst;
    int row;
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    doPost(request, response);

     Connection con;
    PreparedStatement pst; 
    String jsonData = request.getParameter("data1");
    PrintWriter out = response.getWriter();

     Gson gson = new Gson();
    Product data1 = gson.fromJson(jsonData, Product.class);
    String item = data1.getItem();
    int price = data1.getPrice();
    int qty = data1.getQty();
    int total = data1.getTotal();




     try 
    {
        con = DriverManager.getConnection("jdbc:mysql://localhost/icepos", "root", "");
        pst = con.prepareStatement("insert into sale_product(item,price,qty,total)values(?,?,?,?) ");
        pst.setString(1, data1.getItem());
        pst.setInt(2, data1.getPrice());
        pst.setInt(3, data1.getQty());
        pst.setInt(4, data1.getTotal());
        pst.executeUpdate();

        out.println("<font color='green'>  Record Adddd   </font>");
    } catch (SQLException ex) {
        out.println("<font color='red'>  Record Failed   </font>");
    }

}







public void doPost(HttpServletRequest req,HttpServletResponse rsp ) throws IOException,ServletException
{
    rsp.setContentType("text/html");
      PrintWriter out = rsp.getWriter();


     out.println("<font color='green'>  Record Adddd   </font>");

}


0 commentaires

4 Réponses :


0
votes

HTTPServille Classe a une autre méthode Doket. Vous pouvez remplacer la méthode, alors supportez la demande d'obtention


4 commentaires

com.google.gson.jsonsyntaxException: java.lang.illegalstateException: attendu begin_Object mais Begin_array à la ligne 1 Colonne 2 chemin Cette erreur est également déployée


Monsieur, j'ai fait ce que tu m'as dit ça, mais aucune erreur. l'enregistrement n'est pas ajouté


retour "Étudiant [article:" + article ", Pro Prix:" + pro Prix + ", Qté:" + Qté ", Total:" + Total + "]";


Vous utilisez la méthode suivante pour analyser JSON String: Statique publique Liste GetObjectlist (chaîne JSRONDING, Classe CLS) {Liste Liste = Nouveau ArrayList <> (); essayez {gson gson = nouveau gson (); Jsonarray arry = nouveau JSONPARSER (). Parse (jsonstring) .getasjsonarray (); pour (JSONELement JSPELement: Arry) {List.Ajouter (gson.fromjson (JSONELement, CLS)); }} Catch (exception e) {E.PrintStackTrace (); } Liste de retour; }



0
votes

votre côté client (à partir du navigateur) effectue une demande d'obtention et puisque vous n'avez pas de méthode Doket (), vous recevez cette erreur.

Bien que vous puissiez ajouter une méthode doget () dans votre classe mais Cela ne résoudra pas le problème de votre cas d'utilisation. Vous devez envoyer une demande postale de votre client (consultez votre code AJAX sur le côté client). La demande d'obtention n'est pas censée avoir du corps plutôt qu'il ne devrait avoir que l'URL demandée avec des paramètres de requête. P>

En outre, je vous vois que vous essayez de cartographier les données envoyées par votre client P>

{"item":"Chocolate","price":"32","qty":"1","total":"32"}


0 commentaires

0
votes

Votre chaîne JSON est une matrice, mais vous analysez un objet. Donc, vous devez analyser une liste. Suivez:

@Test
public void testGson(){
    String jsonStr = "[{\"item\":\"Chocolate\",\"pro_price\":\"32\",\"qty\":\"1\",\"total\":\"32\"}, {\"item\":\"Mango\",\"pro_price\":\"10\",\"qty\":\"1\",\"total\":\"10\"}]";
    List<Product> objectList = getObjectList(jsonStr, Product.class);
    System.out.println(objectList);
}
public static <T> List<T> getObjectList(String jsonString,Class<T> cls){
    List<T> list = new ArrayList<>();
    try {
        Gson gson = new Gson();
        JsonArray arry = new JsonParser().parse(jsonString).getAsJsonArray();
        for (JsonElement jsonElement : arry) {
            list.add(gson.fromJson(jsonElement, cls));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}


3 commentaires

[Produit [Article = Chocolat, Pro_Price = 32, Qté = 1, Total = 32], Produit [Article = Chocolat, Pro_Price = 32, Qté = 1, Total = 32]] Maintenant, affichez-le comme suit. J'ai besoin d'un élément de chaîne définie = Objectlist.item Mais je n'ai pas besoin d'ajouter des valeurs à la base de données


Vous voulez dire que vous ne pouvez pas insérer de valeurs à dB?


Oui, je ne peux pas insérer de valeurs comment insérer les valeurs SIR String item = ObjectList.Item Comment obtenir l'élément de la liste



0
votes

Vous pouvez faire boucle la liste, comme suivez:

for (Product product : objectList) {
        try
        {
            con = DriverManager.getConnection("jdbc:mysql://localhost/icepos", "root", "");
            pst = con.prepareStatement("insert into sale_product(item,price,qty,total)values(?,?,?,?) ");
            pst.setString(1, product.getItem());
            pst.setInt(2, product.getPrice());
            pst.setInt(3, product.getQty());
            pst.setInt(4, product.getTotal());
            pst.executeUpdate();

            out.println("<font color='green'>  Record Adddd   </font>");
        } catch (SQLException ex) {
            out.println("<font color='red'>  Record Failed   </font>");
        }
    }


4 commentaires

Merci génial travail monsieur. vraiment bien développeur monsieur vous.


Après avoir affiché l'enregistrement adddd msg, j'ai besoin de passer pour imprimer.jsp comment l'appeler monsieur


Vous pouvez utiliser le démontage de printemps + mybatis que je conseille. C'est très simple et rapide


Spring Boot: printemps myBatis: mybatis.org . Vous pouvez suivre le guide ou la recherche par Google