无法将数据从 React 发送到 Springboot

Posted

技术标签:

【中文标题】无法将数据从 React 发送到 Springboot【英文标题】:Unable to send data from React to Springboot 【发布时间】:2022-01-21 13:38:14 【问题描述】:

我无法将数据保存到数据库中。我不明白问题是什么。使用 Postman 对其进行测试时,API 正在工作。我想将姓名、dob、教室、部门和性别值存储到数据库中。

 <center><button type="submit" className="btn btn-primary" onClick=this.addStudent>Register</button></center>

按钮元素中的onClick会调用下面的addStudent()函数。

addStudent (e) 
            let studentData = 
                name: this.state.name,
                dob: this.state.dob,
                clas-s-room: this.state.clas-s-room,
                division: this.state.division,
                gender: this.state.gender
            ;
            
            JSON.stringify(studentData);
        
            ApiService.getStudents(studentData).then((response) => 
                console.log(response);
            );
        
        

ApiService() 如下:

import axios from "axios";

const SAVE_DATA = "http://localhost:8080/api/save"
const STUDENT_DATA = "http://localhost:8080/api/students"

class ApiService 
    saveStudent(studentData) 
        console.log("Inside saveStudent()")
        return axios.post(SAVE_DATA, studentData);
    

    getStudents() 
        return axios.get(STUDENT_DATA);
    


export default new ApiService();

Springboot API Controller 如下:

package com.student.registration.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.student.registration.entity.Student;
import com.student.registration.services.RegServices;

@CrossOrigin(origins = "http://localhost:3000")
@RestController
@RequestMapping(value = "/api")
public class RegController 
    
    @Autowired
    RegServices services;
    
    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public String saveData(@RequestBody Student student) 
        return services.save(student);
    
    
    @RequestMapping(value = "/students")
    public List<Student> getAllStudents() 
        return services.getAll();
    


【问题讨论】:

控制台有错误吗?也许这就是 CORS 的问题 @ZainKhan 控制台未显示任何错误 @ZainKhan 该程序未到达 ApiService() 中的 saveStudent() 函数内部。 saveStudent() 中的打印语句未在控制台中打印。为什么会这样? 但您在点击事件中调用了ApiService.getStudents 如果您觉得我的回答有帮助,请接受我的回答,谢谢 【参考方案1】:

用这个替换你的点击函数,因为你从你的 API 服务调用了错误的函数

addStudent (e) 
    let studentData = 
        name: this.state.name,
        dob: this.state.dob,
        clas-s-room: this.state.clas-s-room,
        division: this.state.division,
        gender: this.state.gender
    ;
    
    studentData = JSON.stringify(studentData);

    ApiService.saveStudent(studentData).then((response) => 
        console.log(response);
    ).catch((error) => console.log(error));

并在您的服务中添加 async/await

import axios from "axios";

const SAVE_DATA = "http://localhost:8080/api/save"
const STUDENT_DATA = "http://localhost:8080/api/students"

class ApiService 
    async saveStudent(studentData) 
        console.log("Inside saveStudent()")
        return await axios.post(SAVE_DATA, studentData);
    

    async getStudents() 
        return await axios.get(STUDENT_DATA);
    


export default new ApiService();

【讨论】:

仍然无法正常工作。控制台未显示任何错误。

以上是关于无法将数据从 React 发送到 Springboot的主要内容,如果未能解决你的问题,请参考以下文章

React Native 如何将 AsyncStorage 数据发送到 MongoDB 数据库?

将数据从对象发送到 React 组件

将数据从 React 发送到 MySQL

通过重定向将数据从 Express 发送到 React

无法使用 axios 将 jwtToken 从反应客户端发送到节点/快递后端

如何使用 Axios 将 CSRF Coo​​kie 从 React 发送到 Django Rest Framework