J'ai des problèmes avec l'envoi de données sur Spring Boot Server. Je vérifie avec le postman, tout est bon, mais j'utilise Axios Bibliothèque de ReactJS, je reçois une erreur
import axios from 'axios'; import * as Config from './../constants/Config'; export default function callApi(endpoint, method, body) { return axios({ method: method, url: `http://localhost:8000/api/${endpoint}`, data: body, headers: { 'Access-Control-Allow-Origin': '*' } }).catch(err => { console.log(err); }); }
3 Réponses :
Le Le @RequestParam code> Annotation obtient ses données de l'URL. Qui devrait être comme:
? Nom = myName & Price = 100 & Status = OK CODE> P>
@Requestbody code> L'annotation est ce que vous recherchez si vous êtes à la recherche de Envoi des données sous forme d'objet JSON dans le corps de la demande. Assurez-vous également de définir le type code> de type code> dans votre
Axios code> Demande de
Application / JSON CODE> P>
axios.post('url', JSON.stringify({
"name": productName,
"price": productPrice,
"status": productStatus,
}) , { headers: { "Content-Type": "application/json" }
})
Merci, j'ai changé d'en-tête mais une erreur de retour du serveur 'requise String Parameter' Nom 'n'est pas présente'
D'accord. Essayez d'exécuter json.stringify (données) code> sur votre objet de données contenant code> nom code>
Price code> et
statut code>. Assurez-vous également de définir les valeurs de clé de l'objet dans des guillemets doubles. Comme
"nom": produitName code>
"prix": 200 code> et ainsi de suite. Mal à jour ma réponse. Si cela ne fonctionne toujours pas. Veuillez enregistrer l'objet de la demande que vous recevez dans la console de système Java et ajoutez la sortie à votre question.
Vous devez soit modifier les paramètres de votre méthode d'ajout à un seul @Requestbody produit code> paramètre. Ou vous devez inclure tous les paramètres de paramètre de requête dans votre demande Axios Ex:
Produit / Ajouter? Nom = myName & Price = 100 & Status = OK CODE> P> P>
Votre service de repos s'attend à ce que les paramètres de demande de demande et au printemps sont obligatoires par défaut. Mais dans votre code de réact, vous n'envoyez pas ces paramètres de demande, vous les envoyez à la place, vous les envoyez en tant qu'organe de la demande.
Name est le premier param dès que ce n'est pas disponible, le nom de Spring Jantes 'Nom' non disponible, mais une fois que vous Fixez-le, il lancera le prix, puis le statut. Alors corrigez-les tous ensemble. P>
Vous devez soit modifier votre méthode de contrôleur comme ci-dessous, ce qui sera plus efficace de code et de standard de repos. P>
addProduct = (e) => { e.preventDefault(); var { productName, productPrice, productStatus } = this.state; callApi('product/add?name=' + productName + '&price=' + productPrice + '&status=' + productStatus , 'POST', {}).then(res => { console.log(res); }); }
Le problème est que vous ne devriez jamais vraiment utiliser la méthode postale avec les paramètres de la demande. Faire cela, vous pouvez simplement coller cela dans votre navigateur http: // localhost: 8080 / produit / Ajouter? Nom = MyName & Price = 100 & STAT US = OK CODE> et cela appellera avec succès l'API et contournera toute entreprise Logique mise en œuvre sur votre client réact. Vous ne voulez pas donner accès aux données d'insérer dans votre base de données de cette façon
J'ai une question veulent vous demander. Les paramattres de l'URL au serveur correspondront au champ d'une table sur le côté serveur, non? Par exemple localhost: 8080 / produit / ... Nom, prix, statut va correspondre nom, prix, champs de statut dans la table des produits
Pas nécessairement. Par défaut, il utilise le même nom de variable pour mapper les variables Java sur le côté serveur. Mais vous pouvez modifier le @requestparam code> ou
@Requestbody code> pour mapper la variable JSON à une variable Java différemment. Comme il est actuellement codé sur votre demande. Ils devraient mapper directement par défaut. Convention similaire suit lors de la cartographie de votre variable Java à une entité de base de données lorsque vous utilisez le
@Table code> et
@column code> annotations
Ce n'est pas le cas. En fait, le ressort prend les noms de paramètres de la méthode du contrôleur que vous avez mis le nom, le prix, le statut. Mais vous avez la possibilité de transmettre le nom de paramètre de demande différent comme ci-dessous @requestparam (nom = "DifféralName") String UNNERNAME Dans ce cas, vous devez envoyer la demande localhost: 8080 / produit / Ajouter? Nom de différentiel = nom de test et dans votre code produit.setName (un autre nom); Voici donc ici, vous pouvez voir votre demande PARAM et méthode Nom de paramètres et nom de champ de produit Tous sont différents. Et comme @nabelmewehmood suggéré à l'aide de la demande Param n'est pas recommandé pour les créations.
Ajouter le nom de l'URL demandée comme
'Produit / Ajouter? Nom =' + produitName code>
Comment ressemblent votre méthode de votre controller?
Où obtenez-vous cette erreur? Comment définit votre demande sur le côté serveur? Il peut être bon de montrer également
callapi code>
Je reçois cette erreur du serveur. I utilisateur Axios à envoyer une demande au serveur.
Est-ce que changer
@requestparam code> à
@Requestbody code> dans tous les paramètres code> CreateProduct code> Les paramètres résolvent votre problème?
@barbsan j'ai essayé mais j'ai toujours eu cette erreur au-dessus
Pouvez-vous montrer que Axios appelle dans
callapi code>? Avez-vous inspecté votre demande dans la console de votre navigateur?
J'ai vérifié et j'ai eu une erreur "Le serveur a répondu avec un statut de 400"
Par "Inspecter", je voulais comparer l'URL, les paramètres et les en-têtes avec ceux que vous envoyez avec facteur