目录
@PathVariable 和 @RequestParam和 @RequestBody
@AllArgsConstructor和@NOArgsConstructor
@JsonProperty和@JSONField,@SerializedName
@ConfigurationProperties和@value
@AutoConfigureBefore 和 @AutoConfigureAfter
参考
重点参考:java开发注解大全 这里面除了spring的常用注解以外,还有其它包的注解 比较全
SpringBoot参考:SpringBoot注解大全
下面是自己总结的
下面是自己写的笔记
java注解大全参考:
实用的注解:
@Controller 和 @RestController
使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面 若返回json等内容到页面,则需要加@ResponseBody注解
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
@RequestMapper
用来处理请求地址映射的注解,可用于类或方法上 参考:@RequestMapping 用法详解之地址映射(转) - 红酒人生 - 博客园
可以被下面的新注解替代
-
@GetMapping
-
@PostMapping
-
@PutMapping
-
@DeleteMapping
-
@PatchMapping
如:
@RequestMapping(value = "/get/{id}", method = RequestMethod.GET) 等于 @GetMapping("/get/{id}")
重点:可以在@RequestMapping注解中用{}来URL 映射
参考:
【spring】详解@RequestMapping注解的基本属性以及使用_@requestmapping get-CSDN博客
@RequestMapping 使用须知_requestmapping({-CSDN博客
spring中@RequestMapping的用法_@requestmapping中加入{}-CSDN博客
@PathVariable 和 @RequestParam和 @RequestBody
获取前端传过来的参数 @RequestParam和 @RequestBody 常用一些,@PathVariable不常用
当然前端用json对象传输时也可以不用注解,直接用和前端一样的参数名也可以接受到值
参考:SpringBoot实现前后端数据交互、json数据交互、Controller接收参数的几种常用方式_月半花开的博客-CSDN博客_springboot前端获取后端数据
参考:后端如何接受前端传过来的Json数据_求知者_______的博客-CSDN博客_后端怎么接收前端的json数据
@PathVariable,@RequestParam中的name和value 如:@RequestParam(value = "pageSize") Integer pageSize value其实就是我们在前台页面传过来的参数名称, 用来解决前后台传入参数不一致的问题 注意:name和value只能使用一个, name和value属性也是完全等价 参考:@PathVariable,@RequestParam中的name和value_cauchy6317的博客-CSDN博客_@requestparam name和value
@RequestBody在方法参数中只能使用一个,如果多个参数都要使用该注解,可以将多个参数封装在一个类中,使用该类接受值 @RequestBody接收的参数是来自requestBody中,即请求体 ,因此该注解常用于post请求,不能用于get请求
@RequestBody和@RequestParam区别: 参考:POST、GET、@RequestBody和@RequestParam区别_Hello World-CSDN博客_@requestparam
@RequestHeader
获取请求头信息,
@RequestHeader注解是Spring框架中的一个注解,用于从HTTP请求头中获取特定的信息。通过使用@RequestHeader注解,我们可以方便地获取HTTP请求头中的各种信息,如用户代理、授权信息、内容类型等。
示例代码:
@RestController
public class UserController {
@GetMapping("/user-token")
public String getUserToken(@RequestHeader("User-Token") String userToken) {
return "User Token: " + userToken;
}
}
@DateTimeFormat 和@JsonFormat
参考 @DateTimeFormat 和 @JsonFormat 注解_月下泛舟的博客-CSDN博客_datetimeformat
@DateTimeFormat 入参格式化
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date date;
//在前端传入参数 必须是上面的格式
//date返回这样的格式:"2018-08-01T14:25:31.296+0000" 因为是Date对象
@JsonFormat 出参格式化(实用)
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date date;
//date返回 "2018-08-01 14:32:57" 的格式
//该注解看需求是否添加时区 timezone = "GMT+8"
//完整示例
public class User {
private String id;
private String name;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date bir;//格式化了时间,当然也可以在get/set方法上添加
private String sex;
private String address;
}
@Data
可以为类提供读写功能,从而不用写get、set方法。 还会为类提供 equals()、hashCode()、toString() 方法。
使用: 1、安装lombok插件 2、 在maven库中添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
3、 在实体类上添加@Data注解即可生效
4、如果有问题,看看是否是jdk版本不对,和包的版本冲突了 参考:解决Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile_分享传递价值-CSDN博客 Idea在实体类中添加@Data注解后启动时编译报错 java:找不到符号_吹啊~吹啊~大风吹~~-CSDN博客_@data找不到符号
@AllArgsConstructor和@NOArgsConstructor
lombok中的注解, 一般和@Data一起使用 构造函数,该构造函数含有所有已声明字段属性参数 构造函数,该构造函数无参数,空构造函数
@Transactional
声明式事务管理 参考:
@Transactional 详解_愿我如星君如月 ... 夜夜流光相皎洁 ...-CSDN博客_@transactionals
Transactional注解 isolation propagation_@transactional isolation_大鹏小站的博客-CSDN博客(重点)
@CrossOrigin
解决跨域的问题.
解决前端报错 项目是springboot框架,前后端分离,需要跨域 添加 @CrossOrigin @CrossOrigin只在方法中配置跨域时,只需要在方法名上加上这一注解就行吗,如果是通用所有的ip访问,就再设置(origins = “*”,maxAge = 3600),当然也可以细化具体的ip。
@CrossOrigin(origins ="*",maxAge = 3600)
@transient 和 @TableField
mybatis-忽略实体对象的某个属性
方法一: 在需要忽略的属性上增加@transient注解
javax.persistence.Transient;
transient是类型修饰符,只能用来修饰字段。在对象序列化过程中, /被transient标记的变量不会被序列化
方法二: 使用mybatis-plus注解 @TableField(exist = false) false代表此字段不是数据库表字段
@ConditionalOnXxxx 注解 (重点!!)
满足开发者根据不同的条件来实例化bean。
Srping Boot:自动配置之@ConditionalOn注解的实现原理(注解@Profile的实现也是基于此) - 知乎
JSR303数据校验(常用)
参考:使用JSR-303进行校验 ,哪吒的博客
@Pattern和@Valid和@validated和@NotBlank等验证注解(常用)
其中要使用@Pattern和@NotBlank等验证注解的必要条件都是先使用@Valid注解
参考:使用@Pattern@Validated校验 并抛出异常_我的风格0.0的博客-CSDN博客
下面这个链接必看啊
@Validated分组校验groups属性
该属性在NotBlank和NotNull等验证注解都存在
参考:JSR-303注解中的分组校验groups属性 - phax-ccc - 博客园
@Validated分组校验 - 知乎 (必看)
@Builder
为你的类生成相对略微复杂的构建器API 参考:https://blog.csdn.net/djrm11/article/details/104653877/
@configurationproperties注解
用于获取配置文件的值:如application.yml配置文件的值
参考:Spring Boot获取配置文件application.yml的属性值_奋斗的IT青年-CSDN博客_springboot获取application.yml的值
@ConfigurationProperties 注解使用姿势
@JsonProperty和@JSONField,@SerializedName
@JsonProperty和@JSONField:
目的:都是都是为了解决json字符串的某些属性名和JavaBean中的属性名匹配不上的问题。
其中:@JSONField 主要用于返回出参转换,这个注解分别可以注解在实体类的属性、setter和getter方法上
@JsonProperty 主要用于入参转换,和Json字符串序列化为Java对象
参考:序列化Java对象重命名字段,@JSONField、@JsonProperty、@SerializedName_serializedname alternate
@JsonProperty("JsonPropertyName")
private String name;
// json-->java 时:将josn中的JsonPropertyName对象名称转换为name
// java-->json 时:将name---变为--->JsonPropertyName
参考:@JsonProperty和JSONField的区别?_
@SerializedName:
目的:主要是和前端传过来的json数据key值对应,转换为类中自定义的属性 (特别是在前后端参数名称没有对应上的时候,比如前端乱命名,和后端对应不上,就可以使用该注解重新对应,不用更改类的属性名称)
参考:@SerializedName注解_lplj717的博客-CSDN博客_serializedname
google注解@SerializedName的使用说明_Hanson_GG的博客-CSDN博客
@InitBinder
该注解的作用是:初始化一些绑定规则(相当于属性编辑器,可以在后端接收前端参数时进行处理)
常用于控制层
常用的如:
@InitBinder
public void initBinder(WebDataBinder binder){
//让_ID属性无法被接收
binder.setDisallowedFields("_ID");
}
- 注意:initBinder注解的方法返回值只能是void
- WebDataBinder 中不少方法,我们这里使用到了setDisallowedFields。它可以让前端传来的多个参数中,_ID 这个参数无效。避免前端传错参数
@ConfigurationProperties和@value
这两个注解都是读取application.xml配置文件中的值
注意:在使用@value时要注意,使用@value的类要被spring容器管理,意思就是要被注入bean,这时@value才能生效。同时@Value不能静态成员上使用
参考:springboot如何在Java中获取yml中的配置_YHJ的博客-CSDN博客_java获取yml文件配置
@ConfigurationProperties使用及与@Value对比_shuos_yan的博客-CSDN博客_configurationproperties和value
@AutoConfigureBefore 和 @AutoConfigureAfter
@AutoConfigureBefore(AAAA.class)
public class CCCC {
}
// CCCC 将会在 AAAA之前加载
@AutoConfigureAfter(AAAA.class)
public class CCCC {
}
// CCCC 将会在 AAAA 之后加载
参考:注解 @AutoConfigureBefore 和 @AutoConfigureAfter 的用途_
@ExcelProperty
该注解主要用于导出表格的使用(非常好用哦)
@Scheduled
执行定时任务。参考下面的定时器
swagger2 注解说明:
主要有的注解有:
1.1、请求类的描述
| 注解 | 说明 |
| @Api | 对请求类的说明 |
1.2、方法和方法参数的描述
| 注解 | 说明 |
| @ApiOperation | 方法的说明 |
| @ApiImplicitParams | 方法参数的说明; |
| @ApiImplicitParam | 用于指定单个参数的说明。 |
1.3、方法的响应状态的描述
| 注解 | 说明 |
| @ApiResponses | 方法返回值的说明 ; |
| @ApiResponse | 用在@ApiResponses中,一般用于表达一个错误的响应信息 |
1.4、对象的描述
| 注解 | 说明 |
| @ApiModel | 用在JavaBean类上,说明JavaBean的 整体用途 |
| @ApiModelProperty | 用在JavaBean类的属性上面,说明此属性的的含议 |
@Api: 修饰整个类,用于controller类上
@ApiOperation: 描述一个接口,用户controller方法上
@ApiParam: 单个参数描述
@ApiModel: 用来对象接收参数,即返回对象
@ApiModelProperty: 对象接收参数时,描述对象的字段,用于entity类中的字段
@ApiResponse: Http响应其中的描述,在ApiResonse中
@ApiResponses: Http响应所有的描述,用在
@ApiIgnore: 忽略这个API
@ApiError: 发生错误的返回信息
@ApiImplicitParam: 一个请求参数
@ApiImplicitParams: 多个请求参数
等。。。。。。。。。。。。。。。。
具体参考
@PostConstruct详解
@PostConstruct是Java自带的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。
了解的注解:
@FunctionalInterface
参考:JDK8新特性:函数式接口@FunctionalInterface的使用说明_aty-CSDN博客_@functionalinterface 说明这是一个函数式接口,不是必须的,可加可不加 @FunctionalInterface标记在接口上,“函数式接口”是指仅仅只包含一个抽象方法的接口。
自定义注解
@Aspect等相关注解
@Aspect:作用是把当前类标识为一个切面供容器读取
@Pointcut:Pointcut是植入Advice的触发条件。每个Pointcut的定义包括2部分,一是表达式,二是方法签名。方法签名必须是 public及void型。可以将Pointcut中的方法看作是一个被Advice引用的助记符,因为表达式不直观,因此我们可以通过方法签名的方式为 此表达式命名。因此Pointcut中的方法只需要方法签名,而不需要在方法体内编写实际代码。
@Around:环绕增强,相当于MethodInterceptor
@AfterReturning:后置增强,相当于AfterReturningAdvice,方法正常退出时执行
@Before:标识一个前置增强方法,相当于BeforeAdvice的功能,相似功能的还有
@AfterThrowing:异常抛出增强,相当于ThrowsAdvice
@After: final增强,不管是抛出异常或者正常退出都会执行
该使用一般用于 AOP自定义注解,可以参考我的 java细知识点博客的 接口签名校验,AOP自定义注解,这里有详细的使用。
这里举例:
1、定义注解:
/**
* 自定义注解
*/
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Sign {
}
2、定义切面实现代码
/**
* 事件的切面,切方法
*
*/
@Aspect
@Order(1)
@Component
public class SignAop{
/**
* 定义切点, execution里是自定义注解的类的路径,当然这里还可以使用Pointcut里的其它属性
*/
@Pointcut("execution(@com.XXXX.Sign * *(..))")
public void happen() {
}
// 也可以像这样,定义切点为控制层下的和RequestMapping等方法
/**
@Pointcut("(execution(public * com..*Controller.*(..))) and (@annotation(org.springframework.web.bind.annotation.RequestMapping) or @annotation(org.springframework.web.bind.annotation.GetMapping) or @annotation(org.springframework.web.bind.annotation.PostMapping))")
*/
// 实现切面的代码,Around是标识那个方法
@Around("happen()")
public Object publish(ProceedingJoinPoint pjp) throws Throwable {
/** 具体代码实现
*/
}
}
3、使用注解 @Sign ,将它添加到你要使用的地方,我这里是控制层
@Sign
@PostMapping("/test")
public void test(@IdParam @RequestBody @Valid Student student) throws Exception {
}
SpringAop之joinPoint讲解
joinPoint这个注解就是获取被增强方法相关的所有信息。
依赖和插件
PageHelper
分页插件的使用方法
具体步骤: 1、导包 2、配置插件拦截规则 3、使用
1、添加依赖 2、使用 3、参考 Mybatis分页插件PageHelper使用教程(图文详细版)_筱强的博客-CSDN博客_pagehelper使用教程 4、配置规则参考Pagehelper分页插件的配置和各种使用方式 - Sharpest - 博客园
<!--添加分页插件-->
<!--只配置当前这一个依赖 PageHelper不生效-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
<!--还需要把这个依赖添加到pom当中 自动排序和分页就可以使用了-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
<version>1.2.3</version>
</dependency>
Free Mybatis Plugin
mybatis框架下mapper接口快速跳转对应xml文件 亲测好用!
idea插件直接安装即可
idea插件(mybatis框架下mapper接口快速跳转对应xml文件)亲测好用! - King-DA - 博客园
类
spring的RestTemplate使用
在学习与工作中,常常遇见需要调用他人写好的
API接口的情况,前端一般采用Ajax或Axios来调用后端的接口获取数据,而后端调用接口的方式有很多,这里介绍基于Spring框架的RestTemplate。
参考:RestTemplate | 使用详解_ 重点重点参考
RestTemplate的请求参数传递问题 RestTemplate发送Get请求通过body传参问题_ RestTemplate中postForEntity其中参数为数组或者List_RestTemplate的请求参数传递问题 RestTemplate发送Get请求通过body传参问题_
注意:RestTemplate请求的服务实例返回List类型,用数组接收
参考:RestTemplate中postForEntity其中参数为数组或者List_道一哥哥的博客-CSDN博客_postforentity传参
常用模板(post):
public JSONArray accountDetails(String token, List<String> usernames) {
String url = "xxxxxxxxxxxxxxxxxx";
// @formatter:off
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(2);
params.add("access_token" , token);
params.addAll("username[]" , usernames);
// @formatter:on
JSONObject json = (JSONObject) restTemplateUtils.post(url, params, JSONObject.class);
log.info("查询响应:{}", json.toJSONString());
if (json.getInteger("ret") == 0) {
return json.getJSONObject"data").getJSONArray("data");
}
return null;
}
/**
* 封装的post通用部分
*
* @param url 请求路径
* @param params 参数
* @param clazz 响应类型
* @return 请求成功返回body, 请求失败抛出异常
*/
public Object post(String url, MultiValueMap<String, Object> params, Class<?> clazz) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(params, headers);
ResponseEntity<?> response = restTemplate.postForEntity(url, request, clazz);
if (response.getStatusCode() != HttpStatus.OK) {
throw new ResponseStatusException(response.getStatusCode(), "请求出错");
}
return response.getBody();
}
UUIDGenerator类
ID生成器
private IDGenerator idGenerator = UUIDGenerator.getInstance();
id.generate(); //生成唯一的id
参考:
ID生成器介绍及著名的五大开源ID生成器的使用UUID,snowflake:ID生成器介绍及著名的五大开源ID生成器的使用UUID,snowflake_心之所向博客-CSDN博客_id生成器
StringUtils 类
StringUtils 方法的操作对象是 Java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充
除了构造器,StringUtils 中一共有130多个方法,并且都是 static 的,所以我们可以这样调用 StringUtils.xxx()
参考:Java之StringUtils的常用方法_命中的缘分的博客-CSDN博客_stringutils
Workbook类
对Excel进行操作
它的子类中: HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls; XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx;
参考: Java WorkBook对Excel的基本操作_张志翔的博客-CSDN博客_workbook 重点参考 java用XSSFWorkbook实现读写Excel - 那心之所向 - 博客园
工具类Tika
是一个内容分析工具包,可以检测上千种文件类型,并提取它们的元数据和文本。
参考自己写的博客:java 解析文档如excel等的工具类Tika_我的风格0.0的博客-CSDN博客_tika解析excel
Logger日志类
参考:Logger打印日志_码农大圣的博客-CSDN博客_logger.info
java日志LoggerFactory.getLogger最全讲解使用方法_滑稽的鼠标的博客
其中:{} 花括号用于是占位符,用于接收变量
参考:logger 占位符{} 的使用
//调试日志
private final static Logger logger = LoggerFactory.getLogger(XXXXXX.class);
/*
*LoggerFactory.getLogger可以在IDE控制台打印日志,便于开发,一般加在最上面
*优点:使用指定类初始化日志对象,在日志输出的时候,可以打印出日志信息所在类
*/
定时器,定时任务
参考:
Java 定时任务的几种实现方式(重点): Java 定时任务的几种实现方式 - 简书
其中@Scheduled的方式推荐使用(注意该注解要配合@EnableScheduling使用),下面是该方式的示例:
工具
mybatis-generator-gui mybatis图形化界面,可以生成基类及其mapper类和sql
参考:mybatis-generator-gui 一款 mybatis generator 的图形界面工具
工具已上传

https://blog.csdn.net/weixin_44248490/article/details/108779144
&spm=1001.2101.3001.5002&articleId=118516626&d=1&t=3&u=7c16446ec37d4d1e94bfb0f7247a8758)
4051

被折叠的 条评论
为什么被折叠?



