新增收货地址

news/2024/6/24 9:06:23/文章来源:https://blog.csdn.net/dfdg345/article/details/137177565

目录

🧂1.创建controller层

🥓2.创建service层 

🌭3.注意细节 

🍿4.避免dao数据暴漏 


1.创建controller层

controller不做逻辑操作,只接受前端的数据

  • 1.添加@Api设置swagger模块名称
  • 2.@RestController以json形式返回数据给前端
  • 3.@RequestMapping映射地址
  • 4.调用service层
/*** 地址*/
@Api(tags ="收货地址模块")
@RestController()
@RequestMapping("api/address/v1")
public class AddressController {@Autowiredprivate AddressService addressService;@ApiOperation("新增收获地址")@PostMapping("/addAddress")public JsonData addAddress(@ApiParam(value = "地址对象") @RequestBody AddressRequest addressRequest) {addressService.add(addressRequest);return JsonData.buildSuccess();}
}

2.创建service层 

service处理业务逻辑

  • 1.根据拦截器获取threadLocal,进一步获取登录者信息
  • 2.创建实体类UserDo(数据库类),并设置创建时间和用户id
  • 3.判断是否有默认收货地址
    • 如果没有,则新增收获地址
    • 如果有默认收货地址(1),将其状态改为非默认地址(0),在新增默认地址
@Slf4j
@Service
public class AddressServiceImpl implements AddressService {@Autowiredprivate AddressMapper addressMapper;/*** 添加收获地址*/@Overridepublic void add(AddressRequest addressRequest) {//根据拦截器获取threadLocal,获取当前登录者信息LoginUser loginUser = LoginInterceptor.threadLocal.get();//创建地址对象AddressDO addressDO = new AddressDO();//设置创建时间addressDO.setCreateTime(new Date());//设置用户地址addressDO.setUserId(loginUser.getId());//属性对拷BeanUtils.copyProperties(addressRequest, addressDO);//判断是否有默认收货地址if (addressDO.getDefaultStatus() == AddressEnum.DEFAULT_STATUS.getStatus()) {//有默认收货地址//查找照默认收货地址AddressDO defaultAddressUserDo = addressMapper.selectOne(new QueryWrapper<AddressDO>().eq("user_id", loginUser.getId()).eq("default_status", AddressEnum.DEFAULT_STATUS.getStatus()));if (defaultAddressUserDo != null) {//修改默认地址为非默认defaultAddressUserDo.setDefaultStatus(AddressEnum.COMMON_STATUS.getStatus());int rows = addressMapper.update(defaultAddressUserDo, new QueryWrapper<AddressDO>().eq("id", defaultAddressUserDo.getId()));log.info("更新地址{}条,更新后地址状态:{}", rows, defaultAddressUserDo.getDefaultStatus());}}//添加新的地址int rows = addressMapper.insert(addressDO);log.info("新增记录{}条,默认收货地址为:{}", rows, addressDO);}
}

3.注意细节 

为了避免收货地址状态写死,创建枚举类,并设置枚举状态,在实际操作中,设置默认/非默认地址状态时,直接调用枚举获取,虽然麻烦,但后期方便管控

/*** 收货地址状态*/public enum AddressEnum {/*** 默认收货地址*/DEFAULT_STATUS(1),/*** 非默认收货地址*/COMMON_STATUS(0);private int status;private AddressEnum(int status) {this.status = status;}public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}
}

4.避免dao数据暴漏 

在实际项目中,我们不会将数据dao层(数据库类)直接暴露返回,而是创建与其属性字段一致的新的类,并包含其中一部分属性,我们将其返回,既保证dao的安全性,又将前端页面数据封装

例如,我么在新增用户地址时,我们并不是用AddressDo作为对象返回,而是创建新的类AddressRequest作为返回对象,并且我们新增swagger的各种信息方便调试

@Data
@ApiModel(value = "地址对象", description = "新增收获地址")
public class AddressRequest {/*** 是否默认收货地址:0->否;1->是*/@ApiModelProperty(value = "是否是默认收获地址", example = "0")@JsonProperty("default_status")private Integer defaultStatus;/*** 收发货人姓名*/@ApiModelProperty(value = "收发货人姓名", example = "小张家")@JsonProperty("receive_name")private String receiveName;/*** 收货人电话*/@ApiModelProperty(value = "收货人电话", example = "18337082672")private String phone;/*** 省/直辖市*/@ApiModelProperty(value = "直辖市", example = "河南")private String province;/*** 市*/@ApiModelProperty(value = "市", example = "商丘")private String city;/*** 区*/@ApiModelProperty(value = "区", example = "龙华")private String region;/*** 详细地址*/@ApiModelProperty(value = "详细地址", example = "张家镇")@JsonProperty("detail_address")private String detailAddress;
}

注意逻辑之间的调用

小疑惑:地址可以重复吗?? 

如果不可以,怎末避免重复,我想到的是数据库设置唯一索引,你们的回答呢??

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1033803.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

让linux系统时间与(windows)服务器同步操作说明

1将windows服务器配置成NTP服务器 Regedit 改两个注册值&#xff0c;重启时间服务 启Win32Time服务执行如下命令&#xff1a; net stop w32time && net start w32time 2 linux板子操作说明 有两个事要处理 1&#xff08;离线&#xff09;安装同步工具nptdate并测试…

【Vue3源码学习】— CH2.5 reactiveEffect.ts:Vue 3响应式系统的核心

reactiveEffect.ts&#xff1a;Vue 3响应式系统的核心 1. 什么是 reactiveEffect&#xff1f;2. 核心机制2.1 依赖收集&#xff08;Track&#xff09;2.2 触发更新&#xff08;Trigger&#xff09;2.3 效果范围&#xff08;effectScope&#xff09; 3. 源码解析 —— track3.1 …

微信小程序被删除的文件一编译又回来了

一开始创建错了位置&#xff0c;就想着删除文件重新创建&#xff0c;但是没想到每次重新编译的时候&#xff0c;之前被删除的js、wsml文件就又回来了&#xff0c;后来发现是我在app.json中的pages里面的代码没有被删除。 因为我最开始创建错了&#xff0c;快捷创建了页面&#…

【LeetCode热题100】79. 单词搜索(回溯)

一.题目要求 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平…

currentServerAddr:http://localhost:8848, err : connect timed out

场景复现&#xff1a; 一&#xff1a;原配置文件application.yml spring:cloud:nacos:config:server-addr: ${cas-wict-nacos-url}namespace: ${cas-wict-nacos-namespace}shared-configs:- data-id: mysql.propertiesrefresh: true- data-id: mysql.propertiesrefresh: true…

C++项目——集群聊天服务器项目(九)客户端异常退出业务

服务器端应检测到客户端是否异常退出&#xff0c;因此本节来实现客户端异常退出&#xff0c;项目流程见后文 一、客户端异常退出业务流程 &#xff08;1&#xff09;在业务模块定义处理客户端异常退出的函数 &#xff08;2&#xff09;集群聊天服务器项目(八&#xff09;提到…

Linux(CentOS7)安装 MongoDB

目录 下载 上传 解压 创建mongodb.conf 创建数据文件夹和日志文件夹 启动服务 创建软链接 安装客户端 下载 上传 安装 下载 官方地址&#xff1a; Download MongoDB Community Server | MongoDBhttps://www.mongodb.com/try/download/community 上传 将下载好的 …

跨境运营必看:TikTok账号防封指南

多人在使用TikTok的过程中都会遇到一些问题&#xff0c;比如为什么TikTok没有浏览量&#xff1f;事实上&#xff0c;这很可能是因为你的账号已被禁止。但为什么它会被封呢&#xff1f;你怎样才能解决它&#xff1f; 一、TikTok账号为什么被封&#xff1f; 1、什么是 TikTok 影…

输油管道变电所运维系统发展趋势

摘要&#xff1a;随着现代化技术以及信息化手段的飞速发展&#xff0c;社会已经进入到了全新的发展阶段&#xff0c;这也为自动化技术的发展起到了良好的促进作用&#xff0c;特别是在目前输油管道电网快速发展的背景下&#xff0c;传统的输油管道变电站管理模式与管理系统&…

Scrapy爬虫的打包Auto-py-to-exe/Pyinstall

Scrapy爬虫打包成可执行文件 前言步骤Scrapy代码部分auto-py-to-exe部分1. 安装2. 配置 前言 朋友托了我写了个小爬虫&#xff0c;然后写成之后老是要在我这儿跑&#xff0c;交付不了给朋友。项目太小&#xff0c;也不好用scrapyd托管在服务器。找了找有pyinstall和Auto-py-to…

C++语言学习(二)——⭐缺省参数、函数重载、引用

1.⭐缺省参数 &#xff08;1&#xff09;缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void Func(int a 0) {cout<<a<<endl; } int…

keepalived+LVS高可用部署

目录 一.两台设备&#xff08;2.130和2.133&#xff09;作为调度器&#xff0c;前主后备 1.部署keepalived 2.修改配置文件准备启动 3.配置keepalived的系统日志并启动 二.模拟调度器掉点和web服务进程丢失 1.调度器掉点 2.当类似于httpd这种网站服务掉点 三.以三种健康…

简单了解观察者模式(发布 - 订阅模式)

什么是观察者模式&#xff1f; 观察者根据主题类的内部状态变化来改变自身状态&#xff0c;简单来说就是观察者订阅了主题类&#xff0c;当主题类发布一些消息&#xff0c;观察者就会收到消息&#xff0c;然后做出反应。 Spring的观察者模式 Spring用了监听器&#xff08;观察…

时序数据库IoTDB:功能详解与行业应用

一文读懂时序数据库 IoTDB。 01 为什么需要时序数据库 解释时序数据库前&#xff0c;先了解一下何谓时序数据。 时序数据&#xff0c;也称为时间序列数据&#xff0c;是指按时间顺序记录的同一统计指标的数据集合。这类数据的来源主要是能源、工程、交通等工业物联网强关联行业…

数据可视化高级技术(Echarts)

目录 &#xff08;一&#xff09;数据可视化概念及Echarts基础知识 数据可视化的好处&#xff1a; 数据可视化的目标 数据可视化的基本流程 &#xff08;二&#xff09;数据图表 类别比较图表&#xff1a; 数据关系图表&#xff1a; 数据分布图表&#xff1a; 时间序列…

ETL中如何自定义规则

一、ETL中的规则 在使用规则之前我们先来了解一下什么是规则&#xff0c;ETL中规则在很多组件中都能看见&#xff0c;可以理解为按照事前约定好的逻辑去执行&#xff0c;规则可以使得数据更加的规范统一&#xff0c;同时也不需要去纵向的修改底层代码&#xff0c;只需要动态编…

机器学习模型及其使用方法——《机器学习图解》

本书教你两件事——机器学习模型及其使用方法 机器学习模型有不同的类型&#xff0c;有些返回确定性的答案&#xff0c;例如是或否&#xff0c;而另一些返回概率性的答案。有些以问题的形式呈现&#xff1b;其他则使用假设性表达。这些类型的一个共同点是它们都返回一个答案或…

成都市酷客焕学新媒体科技有限公司:实现品牌的更大价值!

成都市酷客焕学新媒体科技有限公司专注于短视频营销&#xff0c;深知短视频在社交媒体中的巨大影响力。该公司巧妙地将品牌信息融入富有创意和趣味性的内容中&#xff0c;使观众在轻松愉悦的氛围中接受并传播这些信息。凭借独特的创意和精准的营销策略&#xff0c;成都市酷客焕…

docker 共享网络的方式实现容器互联

docker 共享网络的方式实现容器互联 本文以nacos连接mysql为例 前提已经在mysql容器中初始化好nacos数据库&#xff0c;库名nacos 创建一个共享网络 docker network create --driver bridge \ --subnt 192.168.0.0/24 \ --gateway 192.168.0.1 mynet此处可以不指定网络模式、…

软件接口安全设计规范及审计要点

1.token授权安全设计 2.https传输加密 3.接口调用安全设计 4.日志审计里监控 5.开发测试环境隔离&#xff0c;脱敏处理 6.数据库运维监控审计 项目管理全套资料获取&#xff1a;软件开发全套资料_数字中台建设指南-CSDN博客