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

公司做网站的多吗番禺怎么读

公司做网站的多吗,番禺怎么读,免费发布推广平台,免费体验服务器本文记录了如何实现用获取户信息#xff0c;用户信息更新#xff0c;用户头像上传三大基础功能 先上接口实现截图#xff1a; 一、项目结构概览 先介绍一下 个人博客系统采用了标准的 Spring Boot 项目结构#xff0c;用户功能相关的文件主要分布在以下几个目录#xff1a…本文记录了如何实现用获取户信息用户信息更新用户头像上传三大基础功能 先上接口实现截图 一、项目结构概览 先介绍一下 个人博客系统采用了标准的 Spring Boot 项目结构用户功能相关的文件主要分布在以下几个目录 WeblogSystem/ ├── src/main/java/com/zxy/weblogsystem/ │ ├── controller/ # 控制器层处理HTTP请求 │ ├── service/ # 服务层实现业务逻辑 │ │ └── impl/ # 服务实现类 │ ├── repository/ # 数据访问层与数据库交互 │ ├── entity/ # 实体类映射数据库表 │ ├── dto/ # 数据传输对象用于API交互 │ ├── exception/ # 自定义异常类 │ └── config/ # 配置类 ├── src/main/resources/ │ ├── static/ # 静态资源 │ ├── templates/ # 模板文件 │ ├── application.properties # 应用配置 │ ├── schema.sql # 数据库表结构 │ └── data.sql # 初始数据 └── docs/ # 项目文档二、用户信息功能实现 实体类定义 文件位置src/main/java/com/zxy/weblogsystem/entity/User.java 功能说明定义用户实体类映射数据库中的 users 表。 主要内容 Data // Lombok注解自动生成getter/setter等方法 NoArgsConstructor // 无参构造函数 AllArgsConstructor // 全参构造函数 Entity // JPA实体类注解 Table(name users) // 指定表名 public class User {Id // 主键GeneratedValue(strategy GenerationType.IDENTITY) // 自增策略private Long id;Column(nullable false, unique true, length 50)private String username;Column(nullable false, length 100)private String password;Column(nullable false, unique true, length 100)private String email;Column(length 50)private String nickname;Column(length 255)private String avatarUrl; // 头像URLColumn(nullable false, length 20)private String role USER;Column(nullable false)private Integer status 1;Column(name created_at, nullable false, updatable false)private LocalDateTime createdAt;Column(name updated_at, nullable false)private LocalDateTime updatedAt;PrePersistprotected void onCreate() {createdAt LocalDateTime.now();updatedAt LocalDateTime.now();}PreUpdateprotected void onUpdate() {updatedAt LocalDateTime.now();} }数据传输对象DTO 2.1 用户信息DTO 文件位置src/main/java/com/zxy/weblogsystem/dto/UserInfoDto.java 功能说明用于返回用户信息的数据传输对象。 主要内容 Data Builder NoArgsConstructor AllArgsConstructor public class UserInfoDto {private Long id;private String username;private String nickname;private String email;private String avatarUrl;private String role;private Integer status;private Integer followersCount; // 粉丝数private Integer followingCount; // 关注数private Integer articleCount; // 文章数private LocalDateTime createdAt; }2.2 用户更新DTO 文件位置src/main/java/com/zxy/weblogsystem/dto/UserUpdateDto.java 功能说明用于接收用户信息更新请求的数据传输对象。 主要内容 Data NoArgsConstructor AllArgsConstructor public class UserUpdateDto {Size(max 50, message 昵称长度不能超过50个字符)private String nickname;URL(message 头像URL格式不正确)private String avatarUrl; }2.3 API响应DTO 文件位置src/main/java/com/zxy/weblogsystem/dto/ApiResponse.java 功能说明统一的API响应格式。 主要内容 Data NoArgsConstructor AllArgsConstructor public class ApiResponseT {private Integer code;private String message;private T data;public static T ApiResponseT success(T data) {return new ApiResponse(200, OK, data);}public static T ApiResponseT success(String message, T data) {return new ApiResponse(200, message, data);}public static T ApiResponseT error(Integer code, String message) {return new ApiResponse(code, message, null);} }数据访问层 文件位置src/main/java/com/zxy/weblogsystem/repository/UserRepository.java 功能说明用户数据访问接口提供数据库操作方法。 主要内容 Repository public interface UserRepository extends JpaRepositoryUser, Long {OptionalUser findByUsername(String username);OptionalUser findByEmail(String email);boolean existsByUsername(String username);boolean existsByEmail(String email); }服务层 4.1 用户服务接口 文件位置src/main/java/com/zxy/weblogsystem/service/UserService.java 功能说明定义用户相关的业务逻辑接口。 主要内容 public interface UserService {/*** 根据用户ID获取用户信息* param userId 用户ID* return 用户详细信息DTO*/UserInfoDto getUserInfo(Long userId);/*** 根据用户ID更新用户信息* param userId 用户ID* param userUpdateDto 用户更新信息DTO* return 更新后的用户信息DTO*/UserInfoDto updateUserInfo(Long userId, UserUpdateDto userUpdateDto);/*** 更新用户头像* param userId 用户ID* param avatarUrl 头像URL* return 更新后的用户信息DTO*/UserInfoDto updateUserAvatar(Long userId, String avatarUrl); }4.2 用户服务实现类 文件位置src/main/java/com/zxy/weblogsystem/service/impl/UserServiceImpl.java 功能说明实现用户服务接口中定义的业务逻辑。 主要内容 Service RequiredArgsConstructor public class UserServiceImpl implements UserService {private final UserRepository userRepository;private final UserFollowRepository userFollowRepository;private final ArticleRepository articleRepository;OverrideTransactional(readOnly true)public UserInfoDto getUserInfo(Long userId) {// 1. 查询用户基本信息User user userRepository.findById(userId).orElseThrow(() - new ResourceNotFoundException(用户不存在ID: userId));// 2. 查询统计数据Integer followersCount userFollowRepository.countByFollowedId(userId);Integer followingCount userFollowRepository.countByFollowerId(userId);Integer articleCount articleRepository.countByAuthorId(userId);// 3. 构建并返回DTOreturn UserInfoDto.builder().id(user.getId()).username(user.getUsername()).nickname(user.getNickname()).email(user.getEmail()).avatarUrl(user.getAvatarUrl()).role(user.getRole()).status(user.getStatus()).followersCount(followersCount).followingCount(followingCount).articleCount(articleCount).createdAt(user.getCreatedAt()).build();}OverrideTransactionalpublic UserInfoDto updateUserInfo(Long userId, UserUpdateDto userUpdateDto) {// 1. 查询用户是否存在User user userRepository.findById(userId).orElseThrow(() - new ResourceNotFoundException(用户不存在ID: userId));// 2. 更新用户信息boolean isUpdated false;// 更新昵称if (userUpdateDto.getNickname() ! null !userUpdateDto.getNickname().isEmpty()) {user.setNickname(userUpdateDto.getNickname());isUpdated true;}// 3. 保存更新后的用户信息if (isUpdated) {user userRepository.save(user);}// 4. 查询统计数据并构建返回DTOreturn getUserInfo(userId);}OverrideTransactionalpublic UserInfoDto updateUserAvatar(Long userId, String avatarUrl) {// 1. 查询用户是否存在User user userRepository.findById(userId).orElseThrow(() - new ResourceNotFoundException(用户不存在ID: userId));// 2. 更新用户头像URLuser.setAvatarUrl(avatarUrl);// 3. 保存更新后的用户信息userRepository.save(user);// 4. 查询统计数据并构建返回DTOreturn getUserInfo(userId);} }控制器层 文件位置src/main/java/com/zxy/weblogsystem/controller/UserController.java 功能说明处理用户相关的HTTP请求。 主要内容 RestController RequestMapping(/users) RequiredArgsConstructor public class UserController {private final UserService userService;private final FileService fileService;/*** 获取用户信息*/GetMapping(/{id})public ApiResponseUserInfoDto getUserInfo(PathVariable Long id) {UserInfoDto userInfo userService.getUserInfo(id);return ApiResponse.success(userInfo);}/*** 更新用户信息*/PutMapping(/{id})public ApiResponseUserInfoDto updateUserInfo(PathVariable Long id, Valid RequestBody UserUpdateDto userUpdateDto) {UserInfoDto updatedUserInfo userService.updateUserInfo(id, userUpdateDto);return ApiResponse.success(更新成功, updatedUserInfo);}/*** 上传用户头像*/PostMapping(/{id}/avatar)public ApiResponseMapString, String uploadAvatar(PathVariable Long id, RequestParam(file) MultipartFile file) {// 1. 调用文件服务上传头像String avatarUrl fileService.uploadAvatar(id, file);// 2. 更新用户头像信息userService.updateUserAvatar(id, avatarUrl);// 3. 返回头像URLMapString, String result new HashMap();result.put(avatarUrl, avatarUrl);return ApiResponse.success(上传成功, result);} }三、文件上传功能实现 文件上传配置 文件位置src/main/java/com/zxy/weblogsystem/config/FileUploadConfig.java 功能说明配置文件上传相关参数和静态资源访问。 主要内容 Configuration public class FileUploadConfig implements WebMvcConfigurer {Value(${file.upload.path:uploads})private String uploadPath;Value(${file.access.path:/uploads/})private String accessPath;Beanpublic MultipartResolver multipartResolver() {return new StandardServletMultipartResolver();}Overridepublic void addResourceHandlers(NonNull ResourceHandlerRegistry registry) {// 确保上传目录存在File uploadDir new File(uploadPath);if (!uploadDir.exists()) {uploadDir.mkdirs();}// 获取上传目录的绝对路径String absolutePath uploadDir.getAbsolutePath();// 添加资源处理器将上传路径映射到访问路径registry.addResourceHandler(accessPath **).addResourceLocations(file: absolutePath /);} }文件上传异常 文件位置src/main/java/com/zxy/weblogsystem/exception/FileUploadException.java 功能说明自定义文件上传异常类。 主要内容 public class FileUploadException extends RuntimeException {public FileUploadException(String message) {super(message);}public FileUploadException(String message, Throwable cause) {super(message, cause);} }文件服务接口 文件位置src/main/java/com/zxy/weblogsystem/service/FileService.java 功能说明定义文件上传相关的业务逻辑接口。 主要内容 public interface FileService {/*** 上传头像文件* * param userId 用户ID* param file 头像文件* return 头像访问URL*/String uploadAvatar(Long userId, MultipartFile file); }文件服务实现类 文件位置src/main/java/com/zxy/weblogsystem/service/impl/FileServiceImpl.java 功能说明实现文件上传相关的业务逻辑。 主要内容 Service RequiredArgsConstructor public class FileServiceImpl implements FileService {Value(${file.upload.path:uploads})private String uploadPath;Value(${file.access.path:/uploads/})private String accessPath;private static final ListString ALLOWED_IMAGE_TYPES Arrays.asList(image/jpeg, image/png);Overridepublic String uploadAvatar(Long userId, MultipartFile file) {// 1. 校验文件是否为空if (file null || file.isEmpty()) {throw new FileUploadException(上传文件不能为空);}// 2. 校验文件类型String contentType file.getContentType();if (contentType null || !ALLOWED_IMAGE_TYPES.contains(contentType)) {throw new FileUploadException(只支持JPG和PNG格式的图片);}// 3. 校验文件大小if (file.getSize() 2 * 1024 * 1024) { // 2MBthrow new FileUploadException(文件大小不能超过2MB);}try {// 4. 确保上传目录存在File uploadDir new File(uploadPath);if (!uploadDir.exists()) {uploadDir.mkdirs();}// 5. 创建用户头像目录String userAvatarDir uploadPath /avatars/ userId;File userDir new File(userAvatarDir);if (!userDir.exists()) {userDir.mkdirs();}// 6. 生成唯一文件名String originalFilename file.getOriginalFilename();String fileExtension originalFilename ! null ? originalFilename.substring(originalFilename.lastIndexOf(.)) : .jpg;String newFilename UUID.randomUUID().toString() fileExtension;// 7. 保存文件Path targetPath Paths.get(userAvatarDir, newFilename);Files.copy(file.getInputStream(), targetPath);// 8. 返回文件访问URLreturn accessPath avatars/ userId / newFilename;} catch (IOException e) {throw new FileUploadException(文件上传失败: e.getMessage());}} }四、配置文件 应用配置 文件位置src/main/resources/application.properties 功能说明配置应用参数包括数据库连接、文件上传等。 主要内容 # 数据库配置 spring.datasource.urljdbc:mysql://localhost:3306/weblog?useSSLfalseserverTimezoneUTCcharacterEncodingutf8 spring.datasource.usernameroot spring.datasource.passwordpassword spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver# JPA配置 spring.jpa.hibernate.ddl-autovalidate spring.jpa.show-sqltrue spring.jpa.properties.hibernate.format_sqltrue spring.jpa.properties.hibernate.dialectorg.hibernate.dialect.MySQL8Dialect# 文件上传配置 spring.servlet.multipart.enabledtrue spring.servlet.multipart.max-file-size2MB spring.servlet.multipart.max-request-size10MB spring.servlet.multipart.file-size-threshold0# 文件存储路径配置 file.upload.pathe:/个人博客系统/WeblogSystem/uploads file.access.path/uploads/数据库表结构 文件位置src/main/resources/schema.sql 功能说明定义数据库表结构。 主要内容 -- 用户表 CREATE TABLE IF NOT EXISTS users (id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 用户ID,username VARCHAR(50) NOT NULL UNIQUE COMMENT 用户名,password VARCHAR(100) NOT NULL COMMENT 密码(加密),email VARCHAR(100) NOT NULL UNIQUE COMMENT 邮箱,nickname VARCHAR(50) COMMENT 昵称,avatar_url VARCHAR(255) COMMENT 头像URL,role VARCHAR(20) NOT NULL DEFAULT USER COMMENT 角色,status INT NOT NULL DEFAULT 1 COMMENT 状态(0禁用,1启用),created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间,INDEX idx_email(email),INDEX idx_username(username) ) COMMENT 用户表;五、功能测试 获取用户信息 请求方法GET URL/users/{id} 示例GET http://localhost:8080/users/1 响应示例 {code: 200,message: OK,data: {id: 1,username: admin,nickname: 管理员,email: adminexample.com,avatarUrl: /uploads/avatars/1/63675700-ad83-4e05-a64f-2e59f8a16eeb.jpg,role: ADMIN,status: 1,followersCount: 0,followingCount: 0,articleCount: 0,createdAt: 2025-04-13T12:00:00} }更新用户信息 请求方法PUT URL/users/{id} 请求体 {nickname: 新昵称 }示例PUT http://localhost:8080/users/1 响应示例 {code: 200,message: 更新成功,data: {id: 1,username: admin,nickname: 新昵称,email: adminexample.com,avatarUrl: /uploads/avatars/1/63675700-ad83-4e05-a64f-2e59f8a16eeb.jpg,role: ADMIN,status: 1,followersCount: 0,followingCount: 0,articleCount: 0,createdAt: 2025-04-13T12:00:00} }上传用户头像 请求方法POST URL/users/{id}/avatar Content-Typemultipart/form-data 请求参数 file: 图片文件支持jpg、png最大2MB 示例POST http://localhost:8080/users/1/avatar 响应示例 {code: 200,message: 上传成功,data: {avatarUrl: /uploads/avatars/1/63675700-ad83-4e05-a64f-2e59f8a16eeb.jpg} }六、总结 通过以上实现完成了用户信息管理的三个主要功能 获取用户信息通过用户ID获取用户详细信息包括基本资料和统计数据 更新用户信息支持更新用户昵称等基本信息 上传用户头像支持上传JPG、PNG格式的头像图片并自动更新用户头像URL
http://www.pierceye.com/news/108676/

相关文章:

  • 安庆公司做网站搜索引擎收录提交入口
  • 城固网站建设wordpress主题谁的最好
  • 国外建站企业北京鑫创网站建设
  • 网站做视频wordpress插件手动升级
  • wordpress收不到网站没有收款接口网站怎么做收款
  • 信阳做网站推广用tornado做网站
  • 网站开发与数据库ppt成都优化网站建设
  • 毕业设计静态网站建设选题依据企业网络营销的优势
  • 网站图片动态换名网站充值支付宝收款怎么做
  • 蜘蛛网是个什么网站做特卖的购物网站
  • 从零学做网站古典 网站模板
  • h5网站模板开发网站后台哪些功能需要前端配合
  • 网站建设 宜宾佛山企业网站自助建站
  • 苏宁易购网站建设 的定位手机网站制作招聘
  • 个人网站备案申请360老是提示危险网站
  • 建网站哪个好 优帮云自己怎么注册域名
  • 做3ds磁铁卡网站大连旅顺博物馆
  • 邢台市住房和城乡建设局网站大连网站推广机构
  • 网站建设开标书房地产网页设计
  • 中国建设建设工程造价管理协会网站建设视频网站要求吗
  • 商务网站教程深圳定制纸箱
  • 湖南手机版建站系统哪家好自己做网站地图
  • 天津网站制作报价阿里云需要网站建设方案书
  • 做最好的美食分享网站网站建设客户需求分析
  • 如何重建网站广州市服务好的网站制作排名
  • 做一名优秀网站设计师计划网站描述怎样写
  • 网页二级网站怎么做网监关闭的网站怎么恢复
  • 甘肃省建设监理协会 官方网站国内知名公关公司
  • 如何将网站和域名绑定阿里云1M做网站
  • 南城网站建设公司咨询东莞智通人才网最新招聘