尚硅谷B2C电商毕设微服务项目中所用注释总结
周青的总结记录
文章目录
- 前言
- 正文
- 通用服务 commons
- @Data
- @TableName
- @TableId
- @TableField
- @JsonProperty
- @NotNull
- @NotBlank
- @Length
- @JsonInclude()
- @FeignClient
- @GetMapping
- @PathVariable
- @AllArgsConstructor @NoArgsConstructor
- 业务服务 store
- @SpringBootApplication
- @MapperScan
- @RestController
- @RequestMapping
- @Autowired
- @PostMapping
- @Slf4j
前言
上次自己手写spring项目已经过去了很久,本次学习尚硅谷B2C电商毕设项目时遇到很多注释,虽然大概感觉得到他是做什么的,但不能具体地说出他的作用。现在在本文中对遇到的注释进行总结。以及记录因对这些注释不熟悉而在开发中出现的错误。
正文
仅作粗略记录,详解请参考其他文章的具体解读
通用服务 commons
@Data
出现在pojo,param下的实体类中,省去代大量的get()、 set()、 toString()等方法
@TableName
出现在pojo下的实体类中,对应数据库中的表名,实现实体类型和数据库中的表实现映射
@TableId
出现在pojo下的实体类中,加在实体中表示主键的属性上。
作用:用于设置id的生成策略,即设置id是如何生成的
type 设置主键类型,AUTO:数据库自增。
i.e. :
@TableId(type = IdType.AUTO)
@TableField
”对应j数据库属性名“(赵伟风老师原话)
在MP中通过@TableField注解可以指定字段的一些属性,常常解决的问题有两个:
1.对象中的属性名和表中的字段名不一致(非驼峰)
2.对象中的属性字段在表中不存在
@JsonProperty
出现在pojo,param下的实体类中,”对应json格式化名称“(赵伟风老师原话)。给属性重命名(多一个名字来识别)
在postman测试中传参数名需要传@JsonProperty中的名称
i.e.
实体类为
@NotNull@JsonProperty("user_id")private Integer userId;
则测试的json应为”user_id"而不是"userId"
如果有[nio-3001-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: @NotNull method com/atguigu/param/AddressListParam.getUserId must not return null] with root cause
的JSON转换错误可能原因正在于此。
@NotNull
非空校验。一般用于 Integer 类型的基本数据类型
@NotBlank
非空校验。只能用于 String 类型。要和 @valid 一起使用
@Length
一般用在 String 类型上可对字段数值进行最大长度限制的控制
i.e. :
@Length(min = 6)
@JsonInclude()
为实体类序列化返回增加规则。
i.e. @JsonInclude(Include.NON_NULL):当此值不为空时生成json,过滤掉返回值为null的字段,即字段为null不参与序列化。
@FeignClient
@FeignClient声明Feign的客户端,指明服务名称
【Feign是一个http请求调用的轻量级框架,用于完成服务间远程调用及负载均衡】
Feign会通过动态代理,帮我们生成实现类。
注解@FeignClient声明Feign的客户端,指明服务名称
接口定义的方法,采用SpringMVC的注解。Feign会根据注解帮我们生成URL地址
i.e. :
@FeignClient(value = "provider-service")
public interface ConsumerService {//String url = String.format("http://provider-service/user/findUserById/%s",id);@RequestMapping("/user/findUserById/{id}")User findUserById(@PathVariable("id") Integer id);
}
@GetMapping
【@RequestMapping作用:将请求和处理请求的控制器方法关联起来,建立映射关系】
在SpringMVC新版本中,@RequestMapping被
@GetMapping
@PostMapping
@PutMapping
等替代。
@GetMapping用于处理请求方法的GET类型
@PathVariable
@PathVariable 映射 URL 绑定的占位符
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx”) 绑定到操作方法的入参中。
i.e.见上
@AllArgsConstructor @NoArgsConstructor
出现在pojo下的实体类中,
@AllArgsConstructor 有参构造函数
@NoArgsConstructor 无参构造函数
常与@Bulider连用
如果在测试接口时,postman提示400,后台报错提示.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of
com.atguigu.pojo.xxx(although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of
com.atguigu.pojo.xxx (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (PushbackInputStream); line: 2, column: 5]]
错因可能为实体类中缺失这个注释。
业务服务 store
@SpringBootApplication
出现在Application启动类中,springboot的核心注释,run整个框架。
@MapperScan
出现在Application启动类中,指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
(比一个个加@Mapper注解更简便)
@RestController
出现在controller下的Controller类中
@RestController = @Controller + @ResponseBody
在一个类上添加@Controller注解,表明了这个类是一个控制器类。
@ResponseBody表示方法的返回值直接以指定的格式写入Http response body中。
@RequestMapping
将请求和处理请求的控制器方法关联起来,建立映射关系。
i.e.:
@Controller
@RequestMapping("/demo")
public class DemoController {@RequestMapping("/demo1")public String toDemo(){return "demo";}
}
此时,servlet的路径是http://localhost:端口号/项目名称/demo/demo1
@Autowired
出现在controller下的Controller类,impl类中
注解@Autowired是Spring对组件自动装配的一种方式。常用于在一个组件中引入其他组件。
自动装配:sprng通过依赖注入(DI),完成IOC容器中各个组件依赖的关系赋值。
@PostMapping
出现在controller下的Controller类中
见上文@GetMapping@RequestMapping
@Slf4j
日志输出
尚硅谷B2C电商毕设微服务项目中所用注释总结相关推荐
- Java生鲜电商平台-微服务架构概述
Java生鲜电商平台-微服务架构概述 单体架构存在的问题 在传统的软件技术架构系统中,基本上将业务功能集中在单一应用内,或者是单一进程中.尽管现代化的软件架构理论以及设计原则已推广多年,但实际技术衍化 ...
- Java生鲜电商平台-微服务入门与服务的拆分架构实战
Java生鲜电商平台-微服务入门与服务的拆分架构实战 刚开始进入软件行业时还是单体应用的时代,前后端分离的概念都还没普及,开发的时候需要花大量的时间在"强大"的JSP上面,那时候S ...
- Java生鲜电商平台-微服务生鲜电商用户中心的系统设计(小程序/APP)
Java生鲜电商平台-微服务生鲜电商用户中心的系统设计(小程序/APP) 说明:在微服务生鲜电商用户中心的系统设计中,我一直强调一个观点,就是你这个系统使用用户到底是TO B的还是TO C的呢?这个是 ...
- 亿级流量电商网站微服务架构图(图灵学院)
亿级流量电商网站微服务架构图(图灵学院)
- 【仅售9.9元】石杉老师最新出品:C2C电商系统微服务架构120天实战训练营
石杉老师最新出品:<C2C 电商系统微服务架构 120 天实战训练营>,长按扫描下方二维码了解: 微服务架构是当今架构领域最热的话题之一,也是互联网大厂必问的技术.掌握微服务架构技术栈相关 ...
- Spring Cloud Alibaba微服务项目中集成Redis实现分布式事务锁实践
引言 我们知道同一个进程里面为了解决资源共享而不出现高并发的问题可以通过高并发编程解决,通过给变量添加volatile关键字实现线程间变量可见:通过synchronized关键字修饰代码块.对象或者方 ...
- java版本号管理_微服务项目中如何管理依赖版本号?
本文是微服务项目代码组织形式三部曲中的第三篇,也是最后一篇,通过这三篇文章,相信大家对于如果组织微服务中的代码已经有了一个基本认知,前面两篇分别是: 第三篇相对来说要简单一些,本来没打算写,但是上周有 ...
- 微服务项目中如何管理依赖版本号?
本文是微服务项目代码组织形式三部曲中的第三篇,也是最后一篇,通过这三篇文章,相信大家对于如果组织微服务中的代码已经有了一个基本认知,前面两篇分别是: 微服务项目搭建,到底要不要聚合工程? 在微服务项目 ...
- 管理java版本号_微服务项目中如何管理依赖版本号?
本文是微服务项目代码组织形式三部曲中的第三篇,也是最后一篇,通过这三篇文章,相信大家对于如果组织微服务中的代码已经有了一个基本认知,前面两篇分别是: 微服务项目搭建,到底要不要聚合工程? 在微服务项目 ...
最新文章
- ubuntu 12.04 添加 IP并配置DNS
- 成员函数指针与高性能的C++委托(三)
- linux下的软件包安装(rpm yum)
- PyVmomi 初体验
- 从一个 SAP CRM 软件实际的故障处理出发,谈谈企业管理软件领域内那些很难稳定重现故障的处理技巧
- django 默认查询条件_Python之Django系列-创建第一个应用-4
- (转)OL2中设置鼠标的样式
- SAP License:SAP 各个模块含义
- 内网配置DNS服务器,无域名,只有主机名
- PAT (Basic Level) Practice1008 数组元素循环右移问题
- h3c 链路聚合测试_H3CSE学习之链路聚合
- 材料模拟python_关于材料计算,模拟,仿真什么区别?
- AutoCAD 2006/2007等在高版本系统上无法安装
- colorAccent,colorPrimary,colorPrimaryDark……来这里你就明白了
- 神奇的canvas——点与线绘制的绚丽动画效果
- 10月各国最新签证及入境政策汇总
- 前端—vue项目—版本介绍
- HashMap的原理以及关于put方法的介绍
- Facebook 推出支付服务:Facebook Pay将横跨旗下所有App
- MC51F003A4——ADC
热门文章
- linux 7260驱动程序,Debian 7.6安装Intel Wireless 7260 wifi模块驱动和固件的方法
- 2010最新SCI影响因子 - SCI检索收录期刊目录(分类目录)
- android与苹果 推送,科普下安卓和苹果的推送区别
- MySQL燕十八老师课程笔记:第十五课:union
- 坚持#第13天~触控培训结束 满载而归
- 小程序 数据库 时间_新增NBA2K19数据查询功能 小程序【大P数据库】更新公告
- 自组网中继台_解决方案 无人机无线中继组网_Mesh自组网,无线自组网电台,mesh自组网单兵,自组网设备,无人机图传电台,应急通信自组网基站,COFDM MESH芯片厂家...
- Putty远程连接Hyper-V下的centos7
- qsql 关联_QSqlTableModel qt 数据库读写 使用方法(转)
- css 最简单的导航条