当前位置: 首页 > article >正文

react项目通过http调用后端springboot服务最简单示例

  1. 写一个最简单的组件
import React, { useState, useEffect } from 'react';

function StudentQuery() {
  const [studentName, setStudentName] = useState(''); // 存储学生的姓名
  const [response, setResponse] = useState(null); // 存储从服务器获取的响应数据
  const [error, setError] = useState(null); // 存储错误信息

  // 当studentName发生变化时,自动发起请求
  useEffect(() => {
    const fetchData = async () => {
      try {
        const url = new URL('http://localhost:8080/student'); // 替换为实际的API地址
        console.log(url);
        url.searchParams.append('name', studentName); // 添加查询参数

        const response = await fetch(url); 
        console.log(response);
        
        if (!response.ok) {
          console.log(response);
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        const data = await response.json(); // 假设服务器返回JSON格式的数据
        setResponse(data);
        console.log(data);
      } catch (err) {
        setError(err.message);
      }
    };

    if (studentName) {
      fetchData();
    }
  }, [studentName]); // 依赖数组,只有当studentName改变时才会触发useEffect

  return (
    <div>
      <input
        type="text"
        placeholder="Enter student name"
        value={studentName}
        onChange={(e) => setStudentName(e.target.value)}
      />
      {response && <p>Response: {JSON.stringify(response)}</p>}
      {error && <p style={{ color: 'red' }}>Error: {error}</p>}
    </div>
  );
}

export default StudentQuery;
  1. 后端controller层代码
package com.example.demo2.controller;

import com.example.demo2.model.Student;
import com.example.demo2.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

@RestController
public class StudentController {
    @Autowired
    private StudentService studentService;

    // 在 Spring MVC 的控制器方法中,如果返回Student对象,确保方法的返回类型和@RequestMapping(或者@GetMapping、@PostMapping等注解)中的produces属性设置正确
    @CrossOrigin(origins = "http://localhost:3000") // 解决浏览器跨来源资源共享限制,否则响应结果前端收不到
    @GetMapping(value = "/student", produces = MediaType.APPLICATION_JSON_VALUE)
    public @ResponseBody Student getStudentByName(@RequestParam String name) {
        return studentService.getStudentByName(name);
    }
}
  1. 后续非关键代码即为查询数据库

http://www.kler.cn/a/397540.html

相关文章:

  • 【Python · PyTorch】卷积神经网络(基础概念)
  • FreeSWITCH chat 得到的是 Error! Message Not Sent
  • Excel使用-弹窗“此工作簿包含到一个或多个可能不安全的外部源的链接”的发生与处理
  • Python酷库之旅-第三方库Pandas(218)
  • 贴代码框架PasteForm特性介绍之markdown和richtext
  • 金山云Java 开发面试题及参考答案
  • 如何在 Ubuntu 上安装 Emby 媒体服务器
  • 【人工智能】迁移学习在深度学习中的应用:用Python实现自定义数据集图像分类
  • 云原生之运维监控实践-使用Telegraf、Prometheus与Grafana实现对InfluxDB服务的监测
  • 【自学笔记】神经网络(2) -- 模型评估和优化
  • ArrayList 源码分析
  • 【鸿蒙开发】第十八章 Media媒体服务(一)
  • 37.超级简易的计算器 C语言
  • SpringBoot使用AspectJ的@Around注解实现AOP全局记录接口:请求日志、响应日志、异常日志
  • 打印1~N
  • PHP正则表达式
  • 【Java SE】lambda 表达式
  • 15分钟学 Go 第 56 天:架构设计基本原则
  • 浪潮服务器(BMC)监控易监测指标解读
  • 4399 C++面试题及参考答案
  • IT行业现状与未来趋势
  • SOL链上Meme生态的崛起与未来#Dapp开发#链游#交易所#公链搭建
  • 和 Nostr 探索 Web5 的未来
  • 卓越API设计:简洁统一开放规范
  • 【学习心得】数据分析三剑客跟学Gitee仓库
  • C++知识点总结(57):STL综合