计算机毕业设计 Java酷听音乐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌

🍅文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟


计算机毕业设计《1000套》

Python毕设精品项目

微信小程序毕设精品项目

大数据及机器学习毕设精品项目

目录

1、项目介绍及开发技术

[1.1 项目介绍](#1.1 项目介绍)

[1.2 开发技术](#1.2 开发技术)

2、系统功能设计结构图

3、功能截图

[3.1 前台功能](#3.1 前台功能)

[3.2 后台功能](#3.2 后台功能)

4、数据库表结构设计

5、关键代码

[5.1 歌手信息Controller模块](#5.1 歌手信息Controller模块)

[5.2 歌手信息Service模块](#5.2 歌手信息Service模块)

[5.3 歌手信息ServiceImpl模块](#5.3 歌手信息ServiceImpl模块)

[5.4 歌手信息Dao模块](#5.4 歌手信息Dao模块)

6、论文目录结构

7、源码获取


1、项目介绍及开发技术

1.1 项目介绍

在数字音乐时代,音乐爱好者对于发现和分享音乐的需求日益增长。为了满足用户对个性化音乐体验的追求,我们开发了一个Java酷听音乐系统。该系统旨在为用户提供一个集成化的音乐平台,让用户能够轻松地发现新歌单、了解歌手信息、参与论坛讨论,并管理自己的音乐收藏。

背景: 随着互联网技术的发展,在线音乐平台已经成为人们日常生活中不可或缺的一部分。用户不再满足于单一的听歌功能,他们希望有一个平台能够提供更加丰富的音乐相关内容,如歌单推荐、歌手动态、音乐社区等。然而,现有的音乐平台往往功能分散,用户需要在多个应用之间切换,这不仅影响了用户体验,也限制了音乐的传播和分享。

目的意义:

  1. 提升音乐体验: 系统通过歌单信息和歌手信息模块,帮助用户发现和了解最新的音乐内容,提升音乐体验。
  2. 增强社区互动: 论坛功能让用户可以与其他音乐爱好者交流心得,增强了音乐社区的互动性。
  3. 个性化服务: 个人中心允许用户管理自己的发布内容和收藏,享受个性化的音乐服务。
  4. 优化内容管理: 后端管理模块为管理员提供了音乐类型、歌单和歌手信息的管理工具,优化了内容的更新和维护。
  5. 支持决策制定: 系统收集的用户数据和反馈信息,为平台运营者提供了决策支持,有助于优化服务和提升用户满意度。

综上所述,Java酷听音乐系统的设计与实现,不仅能够为用户提供一个全面、便捷的音乐服务平台,还能够为音乐内容的创作者和管理者提供一个高效、智能的管理工具。通过技术手段优化音乐服务流程,该系统有望成为推动数字音乐行业发展的重要力量。

1.2 开发技术

类别 技术名称 用途/描述
开发语言 Java 一种广泛使用的面向对象编程语言。
框架 Spring Boot 简化Spring应用的初始搭建以及开发过程。
ORM工具 MyBatis Plus MyBatis的增强工具,简化CRUD操作。
数据库 MySQL 流行的关系型数据库管理系统。
构建工具 Maven 项目管理和理解工具。
开发工具 IDEA 集成开发环境,用于代码编写和调试。
JDK版本 JDK 1.8+ Java开发工具包,提供运行Java程序所需的环境。
前端框架 Vue 用于构建用户界面的渐进式JavaScript框架。
UI框架 Element UI 基于Vue的桌面端组件库。
前端技术 HTML 网页内容的标准标记语言。
前端技术 CSS 描述HTML文档的样式。
前端技术 JS 网页脚本语言,用于实现网页的动态效果。

2、系统功能设计结构图

功能模块结构图

├── 前端

│ ├── 登录/注册

│ ├── 首页

│ ├── 歌单信息

│ ├── 歌手信息

│ ├── 论坛

│ └── 个人中心

│ ├── 个人中心

│ ├── 修改密码

│ ├── 我的发布

│ └── 我的收藏

└── 后端

├── 登录

├── 系统首页

├── 用户管理

├── 音乐类型管理

├── 歌单信息管理

├── 歌手信息管理

├── 论坛管理

└── 轮播图管理

└── 个人中心管理

系统MVC框架,请求流程展示:

3、功能截图

3.1 前台功能

3.2 后台功能

4、数据库表结构设计

sql 复制代码
--
-- Table structure for table `discussgeshouxinxi`
--

DROP TABLE IF EXISTS `discussgeshouxinxi`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `discussgeshouxinxi` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `refid` bigint(20) NOT NULL COMMENT '关联表id',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `avatarurl` longtext COMMENT '头像',
  `nickname` varchar(200) DEFAULT NULL COMMENT '用户名',
  `content` longtext NOT NULL COMMENT '评论内容',
  `reply` longtext COMMENT '回复内容',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='歌手信息评论表';
/*!40101 SET character_set_client = @saved_cs_client */;


--
-- Table structure for table `gedanxinxi`
--

DROP TABLE IF EXISTS `gedanxinxi`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `gedanxinxi` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `yinleleixing` varchar(200) NOT NULL COMMENT '音乐类型',
  `fengmian` longtext COMMENT '封面',
  `zhuanjimingcheng` varchar(200) DEFAULT NULL COMMENT '专辑名称',
  `faxingriqi` date DEFAULT NULL COMMENT '发行日期',
  `geci` longtext COMMENT '歌词',
  `songname` varchar(200) NOT NULL COMMENT '歌名',
  `songfile` longtext NOT NULL COMMENT '音乐文件',
  `singer` varchar(200) NOT NULL COMMENT '歌手',
  `thumbsupnum` int(11) DEFAULT '0' COMMENT '赞',
  `crazilynum` int(11) DEFAULT '0' COMMENT '踩',
  `clicktime` datetime DEFAULT NULL COMMENT '最近点击时间',
  `clicknum` int(11) DEFAULT '0' COMMENT '点击次数',
  `discussnum` int(11) DEFAULT '0' COMMENT '评论数',
  `storeupnum` int(11) DEFAULT '0' COMMENT '收藏数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 COMMENT='歌单信息';
/*!40101 SET character_set_client = @saved_cs_client */;


--
-- Table structure for table `geshouxinxi`
--

DROP TABLE IF EXISTS `geshouxinxi`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `geshouxinxi` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `geshouxingming` varchar(200) NOT NULL COMMENT '歌手姓名',
  `zhaopian` longtext NOT NULL COMMENT '照片',
  `geshouxingbie` varchar(200) NOT NULL COMMENT '歌手性别',
  `guojiadiqu` varchar(200) DEFAULT NULL COMMENT '国家地区',
  `daibiaozuo` longtext COMMENT '代表作',
  `zhuanjijieshao` longtext COMMENT '专辑介绍',
  `geshoujieshao` longtext COMMENT '歌手介绍',
  `discussnum` int(11) DEFAULT '0' COMMENT '评论数',
  `storeupnum` int(11) DEFAULT '0' COMMENT '收藏数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8 COMMENT='歌手信息';
/*!40101 SET character_set_client = @saved_cs_client */;


--
-- Table structure for table `token`
--

DROP TABLE IF EXISTS `token`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `token` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `username` varchar(100) NOT NULL COMMENT '用户名',
  `tablename` varchar(100) DEFAULT NULL COMMENT '表名',
  `role` varchar(100) DEFAULT NULL COMMENT '角色',
  `token` varchar(200) NOT NULL COMMENT '密码',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
  `expiratedtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '过期时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='token表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yonghu`
--

DROP TABLE IF EXISTS `yonghu`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `yonghu` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `yonghuzhanghao` varchar(200) NOT NULL COMMENT '用户账号',
  `mima` varchar(200) NOT NULL COMMENT '密码',
  `touxiang` longtext COMMENT '头像',
  `yonghuxingming` varchar(200) NOT NULL COMMENT '用户姓名',
  `xingbie` varchar(200) DEFAULT NULL COMMENT '性别',
  `shoujihaoma` varchar(200) DEFAULT NULL COMMENT '手机号码',
  `email` varchar(200) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`),
  UNIQUE KEY `yonghuzhanghao` (`yonghuzhanghao`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COMMENT='用户';
/*!40101 SET character_set_client = @saved_cs_client */;

5、关键代码

5.1 歌手信息Controller模块

java 复制代码
package com.controller;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.GeshouxinxiEntity;
import com.entity.view.GeshouxinxiView;

import com.service.GeshouxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MPUtil;
import com.utils.MapUtils;
import com.utils.CommonUtil;
import java.io.IOException;
import com.service.StoreupService;
import com.entity.StoreupEntity;

/**
 * 歌手信息
 * 后端接口
 * @author 
 * @email 
 */
@RestController
@RequestMapping("/geshouxinxi")
public class GeshouxinxiController {
    @Autowired
    private GeshouxinxiService geshouxinxiService;

    @Autowired
    private StoreupService storeupService;



    



    /**
     * 后台列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,GeshouxinxiEntity geshouxinxi,
		HttpServletRequest request){
        EntityWrapper<GeshouxinxiEntity> ew = new EntityWrapper<GeshouxinxiEntity>();

		PageUtils page = geshouxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, geshouxinxi), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前台列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,GeshouxinxiEntity geshouxinxi, 
		HttpServletRequest request){
        EntityWrapper<GeshouxinxiEntity> ew = new EntityWrapper<GeshouxinxiEntity>();

		PageUtils page = geshouxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, geshouxinxi), params), params));
        return R.ok().put("data", page);
    }



	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( GeshouxinxiEntity geshouxinxi){
       	EntityWrapper<GeshouxinxiEntity> ew = new EntityWrapper<GeshouxinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( geshouxinxi, "geshouxinxi")); 
        return R.ok().put("data", geshouxinxiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(GeshouxinxiEntity geshouxinxi){
        EntityWrapper< GeshouxinxiEntity> ew = new EntityWrapper< GeshouxinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( geshouxinxi, "geshouxinxi")); 
		GeshouxinxiView geshouxinxiView =  geshouxinxiService.selectView(ew);
		return R.ok("查询歌手信息成功").put("data", geshouxinxiView);
    }
	
    /**
     * 后台详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        GeshouxinxiEntity geshouxinxi = geshouxinxiService.selectById(id);
        return R.ok().put("data", geshouxinxi);
    }

    /**
     * 前台详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        GeshouxinxiEntity geshouxinxi = geshouxinxiService.selectById(id);
        return R.ok().put("data", geshouxinxi);
    }
    



    /**
     * 后台保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody GeshouxinxiEntity geshouxinxi, HttpServletRequest request){
    	//ValidatorUtils.validateEntity(geshouxinxi);
        geshouxinxiService.insert(geshouxinxi);
        return R.ok();
    }
    
    /**
     * 前台保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody GeshouxinxiEntity geshouxinxi, HttpServletRequest request){
    	//ValidatorUtils.validateEntity(geshouxinxi);
        geshouxinxiService.insert(geshouxinxi);
        return R.ok();
    }





    /**
     * 修改
     */
    @RequestMapping("/update")
    @Transactional
    public R update(@RequestBody GeshouxinxiEntity geshouxinxi, HttpServletRequest request){
        //ValidatorUtils.validateEntity(geshouxinxi);
        geshouxinxiService.updateById(geshouxinxi);//全部更新
        return R.ok();
    }



    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        geshouxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
	


}

5.2 歌手信息Service模块

java 复制代码
 package com.service;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.IService;
import com.utils.PageUtils;
import com.entity.GeshouxinxiEntity;
import java.util.List;
import java.util.Map;
import com.entity.vo.GeshouxinxiVO;
import org.apache.ibatis.annotations.Param;
import com.entity.view.GeshouxinxiView;


/**
 * 歌手信息
 *
 * @author 
 * @email 
 */
public interface GeshouxinxiService extends IService<GeshouxinxiEntity> {

    PageUtils queryPage(Map<String, Object> params);
    
   	List<GeshouxinxiVO> selectListVO(Wrapper<GeshouxinxiEntity> wrapper);
   	
   	GeshouxinxiVO selectVO(@Param("ew") Wrapper<GeshouxinxiEntity> wrapper);
   	
   	List<GeshouxinxiView> selectListView(Wrapper<GeshouxinxiEntity> wrapper);
   	
   	GeshouxinxiView selectView(@Param("ew") Wrapper<GeshouxinxiEntity> wrapper);
   	
   	PageUtils queryPage(Map<String, Object> params,Wrapper<GeshouxinxiEntity> wrapper);

   	

}

5.3 歌手信息ServiceImpl模块

java 复制代码
package com.service.impl;

import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;


import com.dao.GeshouxinxiDao;
import com.entity.GeshouxinxiEntity;
import com.service.GeshouxinxiService;
import com.entity.vo.GeshouxinxiVO;
import com.entity.view.GeshouxinxiView;

@Service("geshouxinxiService")
public class GeshouxinxiServiceImpl extends ServiceImpl<GeshouxinxiDao, GeshouxinxiEntity> implements GeshouxinxiService {
	
	
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        Page<GeshouxinxiEntity> page = this.selectPage(
                new Query<GeshouxinxiEntity>(params).getPage(),
                new EntityWrapper<GeshouxinxiEntity>()
        );
        return new PageUtils(page);
    }
    
    @Override
	public PageUtils queryPage(Map<String, Object> params, Wrapper<GeshouxinxiEntity> wrapper) {
		  Page<GeshouxinxiView> page =new Query<GeshouxinxiView>(params).getPage();
	        page.setRecords(baseMapper.selectListView(page,wrapper));
	    	PageUtils pageUtil = new PageUtils(page);
	    	return pageUtil;
 	}

    
    @Override
	public List<GeshouxinxiVO> selectListVO(Wrapper<GeshouxinxiEntity> wrapper) {
 		return baseMapper.selectListVO(wrapper);
	}
	
	@Override
	public GeshouxinxiVO selectVO(Wrapper<GeshouxinxiEntity> wrapper) {
 		return baseMapper.selectVO(wrapper);
	}
	
	@Override
	public List<GeshouxinxiView> selectListView(Wrapper<GeshouxinxiEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

	@Override
	public GeshouxinxiView selectView(Wrapper<GeshouxinxiEntity> wrapper) {
		return baseMapper.selectView(wrapper);
	}


}

5.4 歌手信息Dao模块

java 复制代码
package com.dao;

import com.entity.GeshouxinxiEntity;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;

import org.apache.ibatis.annotations.Param;
import com.entity.vo.GeshouxinxiVO;
import com.entity.view.GeshouxinxiView;


/**
 * 歌手信息
 * 
 * @author 
 * @email 
 */
public interface GeshouxinxiDao extends BaseMapper<GeshouxinxiEntity> {
	
	List<GeshouxinxiVO> selectListVO(@Param("ew") Wrapper<GeshouxinxiEntity> wrapper);
	
	GeshouxinxiVO selectVO(@Param("ew") Wrapper<GeshouxinxiEntity> wrapper);
	
	List<GeshouxinxiView> selectListView(@Param("ew") Wrapper<GeshouxinxiEntity> wrapper);

	List<GeshouxinxiView> selectListView(Pagination page,@Param("ew") Wrapper<GeshouxinxiEntity> wrapper);

	
	GeshouxinxiView selectView(@Param("ew") Wrapper<GeshouxinxiEntity> wrapper);
	

}

6、论文目录结构

摘要... I

Abstract... II

1 绪论... 1

1.1 项目简介... 1

1.2 调查研究... 1

1.2.1 研究背景及意义... 1

1.2.2 国内外研究现状... 2

1.2.3 研究主要内容... 2

1.3 论文的章节安排... 3

2 系统相关技术介绍... 4

2.1 Java语言... 4

2.2 SpringBoot框架... 4

2.3 Vue框架... 4

2.4 MySQL数据库... 4

3 系统需求分析... 6

3.1 可行性分析... 6

3.1.1 技术可行性... 6

3.1.2 经济可行性... 6

3.1.3 操作可行性... 6

3.2 系统功能需求... 6

3.2.1 用户端功能需求... 6

3.2.2 XX端功能需求... 6

3.2.3 管理员端功能需求... 6

3.3 系统性能需求... 6

4 系统总体设计... 7

4.1 系统总体架构设计... 7

4.2 系统的功能设计... 7

4.3 数据库设计... 7

4.3.1 概念设计E-R图... 7

4.3.2 逻辑设计关系模式... 7

4.3.3 数据库物理设计... 7

5 系统详细实现... 14

5.1 系统实现环境... 14

5.2 用户端... 14

5.2.1 登录页面... 14

5.2.2 注册页面... 14

5.2.3 XXXX页面... 14

5.2.4 XXXX页面... 14

5.2.5 XXXX页面... 14

5.3 XXXX端... 15

5.3.1 XXXX页面... 15

5.3.2 XXXX页面... 15

5.3.3 XXXX页面... 15

5.3.4 XXXX页面... 15

5.4 管理端... 15

5.4.1 用户管理页面... 15

5.4.2 XXXX页面... 15

5.4.3 XXXX页面... 16

5.4.4 XXXX页面... 16

6 系统测试... 16

6.1 测试目的... 16

6.2 测试方法... 16

6.3 测试用例... 16

6.3.1 XXXX测试... 16

6.3.2 XXXX测试... 16

6.4 测试结果... 16

结论... 17

参考文献... 18

致谢... 19

更多源码:

计算机毕业设计选题1000套等你来!!!

Python毕设精品项目

微信小程序毕设精品项目

大数据及机器学习毕设精品项目

7、源码获取

感谢大家的阅读,如有不懂的问题可以评论区交流或私聊!

喜欢文章可以点赞、收藏、关注、评论

下方联系方式获取源码

相关推荐
坊钰24 分钟前
【Java 数据结构】移除链表元素
java·开发语言·数据结构·学习·链表
chenziang130 分钟前
leetcode hot100 LRU缓存
java·开发语言
会说法语的猪35 分钟前
springboot实现图片上传、下载功能
java·spring boot·后端
码农老起36 分钟前
IntelliJ IDEA 基本使用教程及Spring Boot项目搭建实战
java·ide·intellij-idea
m0_7482398340 分钟前
基于web的音乐网站(Java+SpringBoot+Mysql)
java·前端·spring boot
时雨h44 分钟前
RuoYi-ue前端分离版部署流程
java·开发语言·前端
麒麟而非淇淋1 小时前
Day13 苍穹外卖项目 工作台功能实现、Apache POI、导出数据到Excel表格
java
m0_748234081 小时前
Spring Boot教程之三十一:入门 Web
前端·spring boot·后端
小爬虫程序猿1 小时前
利用Java爬虫获取速卖通(AliExpress)商品详情的详细指南
java·开发语言·爬虫