常用注解,依赖,常用类,插件和其它(自用)

目录

参考

下面是自己写的笔记

java注解大全参考:

实用的注解:

@Controller 和 @RestController

@RequestMapper

@PathVariable 和 @RequestParam和 @RequestBody

@DateTimeFormat 和@JsonFormat

@Data

@AllArgsConstructor和@NOArgsConstructor

@Transactional

@CrossOrigin

@transient 和 @TableField

JSR303数据校验

@Pattern和@Valid和@validated

分组校验groups属性

@Builder

@configurationproperties注解

@JsonProperty和@JSONField,@SerializedName

@InitBinder

@ConfigurationProperties和@value

@AutoConfigureBefore 和 @AutoConfigureAfter

@ExcelProperty

swagger2 注解说明:

了解的注解:

@FunctionalInterface

依赖和插件

PageHelper

Free Mybatis Plugin

UUIDGenerator类

StringUtils 类

Workbook类

工具类Tika

Logger日志类

定时器

工具


参考

重点参考:java开发注解大全    这里面除了spring的常用注解以外,还有其它包的注解 比较全

SpringBoot参考:SpringBoot注解大全

下面是自己总结的

下面是自己写的笔记

java注解大全参考:

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请求头中的各种信息,如用户代理、授权信息、内容类型等。

参考:使用@RequestHeader注解获取HTTP请求头信息-CSDN博客

示例代码:

@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)

参考:解决前端跨域的问题.Access to XMLHttpRequest at http://xxx.xxx from origin 'http://localhost:8000' has been bl_我在深圳的这些日子的博客-CSDN博客

@transient 和 @TableField

mybatis-忽略实体对象的某个属性

方法一: 在需要忽略的属性上增加@transient注解

javax.persistence.Transient;

transient是类型修饰符,只能用来修饰字段。在对象序列化过程中, /被transient标记的变量不会被序列化

方法二: 使用mybatis-plus注解 @TableField(exist = false) false代表此字段不是数据库表字段

@ConditionalOnXxxx 注解 (重点!!)

满足开发者根据不同的条件来实例化bean。

参考:@ConditionalOn相关注解-CSDN博客

Srping Boot:自动配置之@ConditionalOn注解的实现原理(注解@Profile的实现也是基于此) - 知乎

JSR303数据校验(常用)

参考:使用JSR-303进行校验 ,哪吒的博客  ​​​​​​

 JSR303数据校验 - 简书

@Pattern和@Valid和@validated和@NotBlank等验证注解(常用)

其中要使用@Pattern和@NotBlank等验证注解的必要条件都是先使用@Valid注解

参考:​​​​​​使用@Pattern@Validated校验 并抛出异常_我的风格0.0的博客-CSDN博客​​​​​​

下面这个链接必看啊

(必看,这个必看啊)JAVA 注解校验神器@Valid@validated分组校验、条件校验、自定义校验 关于@validated分组校验的文章有很多,但大多写的比较繁杂,代码还不够干净。本文使用最简单的方式说明了 @validated分组校验的方法以及示例。https://blog.csdn.net/weixin_44248490/article/details/108779144

@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 这个参数无效。避免前端传错参数

参考:springMVC之@InitBinder的用法_wang0907的博客-CSDN博客_initbinder

springmvc学习笔记(24)——initBinder注解_这个2000都搞的博客-CSDN博客

@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

该注解主要用于导出表格的使用(非常好用哦

参考:@excel 注解_Java读写Excel原来这么简单_愤怒的不死鸟的博客-CSDN博客

@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: 多个请求参数
等。。。。。。。。。。。。。。。。

具体参考

swagger2 注解说明_猎人在吃肉的博客-CSDN博客_swagger注解

Swagger 入门教程

@PostConstruct详解

@PostConstruct是Java自带的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。

参考:@PostConstruct详解-CSDN博客

了解的注解:

@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这个注解就是获取被增强方法相关的所有信息。

参考:SpringAop之joinPoint讲解-CSDN博客

依赖和插件

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接口的情况,前端一般采用AjaxAxios来调用后端的接口获取数据,而后端调用接口的方式有很多,这里介绍基于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使用),下面是该方式的示例:

Java 实现 Springboot 定时任务(每隔一段时间自动执行一次)


 

java定时器,每天执行一次/每隔多久执行一次_
 

@Scheduled使用及讲解_

Java 定时任务技术趋势 - 掘金

工具

mybatis-generator-gui    mybatis图形化界面,可以生成基类及其mapper类和sql

参考:mybatis-generator-gui 一款 mybatis generator 的图形界面工具

工具已上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值