- 数据填充
- @Data
- @Autowired
- @Resource
- @Value
- @ConfigurationProperties
- 组件相关
- @EnableAutoConfiguration
- @ComponentScan
- @Component
- @Configuration
- @Bean
- @Repository
- @Service
- @Controller
- @PostConstruct
- @PreDestroy
- Controller
- @Controller
- @ResponseBody
- @ResponseStatus
- @RestController
- @RequestMapping
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
- 请求参数
- @RequestAttribute
- @RequestParam
- @RequestPart
- @RequestBody
- @RequestBody后接基本数据类型对应的封装类报异常
- @PathVariable
- @RequestHeader
- @CookieValue
- @CrossOrigin
- @ModelAttribute
- @SessionAttributes
- 数据检验
- @Valid
- @Validated
- valid pojo属性填充限制
- null检查
- @Null
- @NotNull
- @NotBlank
- @NotEmpty
- Booelan检查
- @AssertTrue
- @AssertFalse
- 长度检查
- @Size(min=, max=)
- @Length(min=, max=)
- 日期检查
- @Past
- @Future
- @Pattern
- 数值检查
- @Min
- @Max
- @DecimalMax
- @DecimalMin
- @Digits
- @Digits(integer=,fraction=)
- @Range(min=, max=)
- @Valid
- @CreditCardNumber
- @ScriptAssert(lang= ,script=, alias=)
- @URL(protocol=,host=, port=,regexp=, flags=)
- Controller全局异常处理
- @ControllerAdvice
- @ExceptionHander
- 事务
- @Transactional
- 导入配置文件
- @PropertySource导入properties或yml文件
- @ImportResource导入xml配置文件
- @Import
- MyBatis系列
- @Mapper
- @MapperScan
- Mybatis (不常用,基础的用mybatis-plus,复杂的用xml)
- MyBatis-Plus
- 任务执行、调度
- @Scheduled
- @Async
自动添加set、get方法
@Autowired按类自动导入,由Spring提供,与springboot耦合度高。
@Autowired和@Resource注解的区别和联系_莫小兮丶的博客
默认通过byName注入,如果没有匹配则通过byType注入,J2EE提供,与springboot耦合度低
@Autowired和@Resource注解的区别和联系_莫小兮丶的博客
此注解使用在字段、构造器参数和方法参数上。@Value可以指定属性取值的表达式,支持通过#{}使用SpringEL来取值,也支使用${}来将属性来源中(Properties文件、本地环境变量、系统属性等)的值注入到bean的属性中。
具体使用方法见 spring的@Value注解使用_菊花超人的博客
@ConfigurationProperties(prefix = "spring.datasource")
读取配置文件,填充到对应属性中,属性名称不要求一定相同,只需保证“set”字符串拼接配置文件的属性和setter方法名相同即可,支持松散绑定。
标注在Bean类上则填充其中对应属性,用在方法上则填充返回值中对应的属性。
帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot,并创建对应配置类的Bean,并把该Bean实体交给IoC容器进行管理。
具体使用方法不会,找了一堆资料都是讲原理。
(49条消息) SpringBoot之@EnableAutoConfiguration注解_zxc123e的博客-CSDN博客_enableautoconfiguration
用来代替配置文件中的 component-scan 配置,开启组件扫描,即自动扫描包路径下的 @Component及相关 注解进行注册 bean 实例到 context 中。
Spring Boot注解之@ComponentScan用法和实现原理 - 楼兰胡杨 - 博客园 (cnblogs.com)
这是一个Bean。
@Configuration@Component的拓展,此注解标注的类中 @Bean标记的方法的返回值添加为组件,如未指定组件名,默认为方法名。
@Bean@Configuration与@Component作为配置类的区别 - 掘金 (juejin.cn)
Spring的单例bean与原型bean - 简书 (jianshu.com)
可在@Component 和 @Configuration 标注的类中方法上使用,将其返回值作为组件,如未指定组件名,默认为方法名。
在@Component组件中使用,获取的Bean每次都不是同一个对象 ,类似于原型Bean
在@Configuration组件中使用,获取的Bean每次都是同一个对象,类似于单例Bean。
数据访问层Bean,@Component的拓展
@Service业务层Bean,@Component的拓展
@Controller控制层Bean,@Component的拓展
@PostConstruct它用来修饰一个非静态的void方法。它会在服务器加载Servlet的时候运行,并且只运行一次,类似于Servlet的inti()方法。
执行的顺序是: 构造方法 -> @PostConstruct -> init()方法 -> @PreDestroy -> destroy()方法。
(49条消息) @PostConstruct与@PreDestroy使用_凌兮~的博客-CSDN博客
被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。
执行的顺序是: 构造方法 -> @PostConstruct -> init()方法 -> @PreDestroy -> destroy()方法。
(49条消息) @PostConstruct与@PreDestroy使用_凌兮~的博客-CSDN博客
控制器类Bean,@Component的拓展
@ResponseBody直接返回结果,并转化为json格式
@ResponseStatus此注解用于方法和exception类上,声明此方法或者异常类返回的http状态码。可以在Controller上使用此注解,这样所有的@RequestMapping都会继承。
@RestController当于@ResponseBody+@Controller合在一起的作用,此注解用于class上,声明此controller返回的不是一个视图而是一个领域对象,对象对转为json字符串。
@RequestMapping将Web请求与请求处理类中的方法进行映射,@RequestMapping可以定义动态路径 ,下面几个也是。
@RequestMapping("/users/{uid}")
@GetMapping
将HTTP get请求映射到特定处理程序的方法注解。
@PostMapping将HTTP post请求映射到特定处理程序的方法注解。
@PutMapping用于处理HTTP PUT请求。
@DeleteMapping用于处理HTTP DELETE请求。
请求参数 @RequestAttribute将web请求中的属性(request attributes,是服务器放入的属性值)绑定到方法参数上。
注意和@RequestParam区分开,attribute一般是后端加入请求中的,param一般是前端表单或路径参数加到请求中的。
用于基本数据类型,复杂数据类型限制要用@Valid,放在参数前,表示只能接收参数a=b格式的数据,即 Content-Type
为 application/x-www-form-urlencoded
类型的内容,如表单。
Http–@RequestBody和@RequestParam详解_Schafferyy的博客
@RequestParam和@RequestPart的区别_借物小人的博客
@RequestPart主要用来处理content-type为multipart/form-data
或multipart/mixed stream
发起的请求,可以获取请求中的参数,包括普通文本、文件或复杂对象比如JSON、XML等,针对复杂对象,需要明确对应的content-type。
@RequestParam默认主要来处理query parameters, form data,and parts in multipart requests, 且是 key-value键值对这种文本
@RequestBody放在参数前,表示参数从request body中获取,而不是从地址栏获取,所以这肯定是接收一个POST请求的非a=b格式的数据,即 Content-Type
不为 application/x-www-form-urlencoded
类型的内容,一般用于json形式请求。
Http–@RequestBody和@RequestParam详解_Schafferyy的博客
原本是@RequestBody Long ***
JSON parse error: Cannot deserialize value of type `java.lang.Long` from Object value (token `JsonToken.START_OBJECT`); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.Long` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (PushbackInputStream); line: 1, column: 1]
封装到一个bo类后解决。
@PathVariable获取url中的数据。
@RequestMapping("/users/{uid}")\
public String execute(@PathVariable("uid") String uid){\
}
@RequestHeader
把Request请求header部分的值绑定到方法的参数上,不存在则默认为null。
@RequestMapping(value = "/hello.htm")
public String hello(@RequestHeader(value="User-Agent", defaultValue="foo")String userAgent){
//..
}
@CookieValue
此注解用在@RequestMapping声明的方法的参数上,可以把HTTP cookie中相应名称的cookie绑定上去。
@ReuestMapping("/cookieValue")
public void getCookieValue(@CookieValue("JSESSIONID") String cookie){
}
cookie即http请求中name为JSESSIONID的cookie值。
@CrossOrigin此注解用在class和method上用来支持跨域请求,是Spring 4.2后引入的(没用过,不懂)。
@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/users")
public class AccountController {
@CrossOrigin(origins = "http://xx.com")
@RequestMapping("/login")
public Result userLogin() {
// ...
}
}
@ModelAttribute
通过此注解,可以通过模型索引名称来访问已经存在于控制器中的model,没用过,不常用。
Spring MVC @ModelAttribute详解 - 知乎 (zhihu.com)
Spring MVC @ModelAttribute注解 (biancheng.net)
此注解用于type级别,用于将JavaBean对象存储到session中。
Spring MVC @SessionAttributes注解 - Just_Do - 博客园 (cnblogs.com)
@SessionAttributes参数
1、names:这是一个字符串数组。里面应写需要存储到session中数据的名称。
2、types:根据指定参数的类型,将模型中对应类型的参数存储到session中
3、value:其实和names是一样的。
@SessionAttributes(value={"names"},types={Integer.class})
@Controller
public class Test {
@RequestMapping("/test")
public String test(Map map){
map.put("names", Arrays.asList("caoyc","zhh","cjx"));
map.put("age", 18);
return "hello";
}
}
1、request中names:${requestScope.names}
2、request中age:${requestScope.age}
3、session中names:${sessionScope.names }
4、session中age:${sessionScope.age }
数据检验
两个valid区别及@Validated分组用法见
@Validated注解详解,分组校验,嵌套校验,@Valid和@Validated 区别,Spring Boot @Validated_昌杰的攻城狮之路的博客
Spring Boot 数据校验@Valid+统一异常处理_JYT IMXB的博客
@Validated@Validated注解详解,分组校验,嵌套校验,@Valid和@Validated 区别,Spring Boot @Validated_昌杰的攻城狮之路的博客
valid pojo属性填充限制 null检查 @Null验证对象是否为null
@NotNull验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty检查约束元素是否为NULL或者是EMPTY.
Booelan检查 @AssertTrue验证 Boolean 对象是否为 true
@AssertFalse验证 Boolean 对象是否为 false
长度检查 @Size(min=, max=)验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=)Validates that the annotated string is between min and max included.
日期检查 @Past验证 Date 和 Calendar 对象是否在当前时间之前
@Future验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern验证 String 对象是否符合正则表达式的规则
数值检查建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null
@Min验证 Number 和 String 对象是否大等于指定的值
@Max验证 Number 和 String 对象是否小等于指定的值
@DecimalMax被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
@DecimalMin被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
@Digits验证 Number 和 String 的构成是否合法
@Digits(integer=,fraction=)验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。
@Range(min=, max=)Checks whether the annotated value lies between (inclusive) the specified minimum and maximum. @Range(min=10000,max=50000,message=“range.bean.wage”) private BigDecimal wage;
@Valid递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)
@CreditCardNumberxyk验证
@Email验证是否是邮件地址,如果为null,不进行验证,算通过验证。
@ScriptAssert(lang= ,script=, alias=) @URL(protocol=,host=, port=,regexp=, flags=) Controller全局异常处理示例(AjaxResult是自定义类)
@RestControllerAdvice
public class MyExceptionHandler
{
private static final Logger log = LoggerFactory.getLogger(MyExceptionHandler.class);
/**
* 基础异常
*/
@RespondBody
@ExceptionHandler(MyException.class)
public AjaxResult baseException(MyException e)
{
return AjaxResult.error(e.getMessage());
}
@RespondBody
@ExceptionHandler(Exception.class)
public AjaxResult handleException(Exception e)
{
log.error(e.getMessage(), e);
return AjaxResult.error(e.getMessage());
}
}
@ControllerAdvice
是@Component注解的一个延伸注解,Spring会自动扫描并检测被@ControllerAdvice所标注的类。
用法
@ControllerAdvice实现优雅地处理异常_KEN DO EVERTHING的博客
@ControllerAdvice 的介绍及三种用法_Ethan.Han的博客
用于标注处理特定类型异常类所抛出异常的方法。当控制器中的方法抛出异常时,Spring会自动捕获异常,并将捕获的异常信息传递给被@ExceptionHandler标注的方法。
事务 @Transactional声明式事务管理编程中使用的注解
导入配置文件 @PropertySource导入properties或yml文件黑马的springboot提到
@PropertySource要搭配@Configuration和@EnableConfigurationProperties(当前类.class)使用,
如使用@Component代替@Configuration,@EnableConfigurationProperties(当前类.class)可省略。
引入单个properties文件:
@PropertySource(value = {"classpath : xxxx/xxx.properties"})
引入多个properties文件:
@PropertySource(value = {"classpath : xxxx/xxx.properties","classpath : xxxx.properties"})
@ImportResource导入xml配置文件
可以额外分为两种模式 相对路径classpath,绝对路径(真实路径)file
注意:单文件可以不写value或locations,value和locations都可用
相对路径(classpath)
- 引入单个xml配置文件:@ImportSource(“classpath : xxx/xxxx.xml”)
- 引入多个xml配置文件:@ImportSource(locations={“classpath : xxxx.xml” , “classpath : yyyy.xml”})
绝对路径(file)
- 引入单个xml配置文件:@ImportSource(locations= {“file : d:/hellxz/dubbo.xml”})
- 引入多个xml配置文件:@ImportSource(locations= {“file : d:/hellxz/application.xml” , “file : d:/hellxz/dubbo.xml”})
取值:使用@Value注解取配置文件中的值
@Value("${properties中的键}")\
private String xxx;
@Import
导入额外的配置信息
功能类似XML配置的,用来导入配置类,可以导入带有@Configuration注解的配置类或实现了ImportSelector/ImportBeanDefinitionRegistrar。
使用示例
@SpringBootApplication
@Import({SmsConfig.class})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
MyBatis系列
@Mapper
在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
@Mapper
public interface UserDAO {
//代码
}
@MapperScan
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
@SpringBootApplication
@MapperScan({"com.kfit.demo","com.kfit. * .mapper","org.kfit. * .mapper"})
public class SpringbootMybatisDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
}
}
Mybatis (不常用,基础的用mybatis-plus,复杂的用xml)
MyBatis手把手跟我做(八) Mybatis注解 - Mr.Yan
MyBatis常用11种注解 - MyBatis中文官网
注解 | MyBatis-Plus
任务执行、调度 @Scheduled此注解使用在方法上,声明此方法被定时调度。使用了此注解的方法返回类型需要是Void,并且不能接受任何参数。
@Scheduled(fixedDelay=1000)
public void schedule() {
}
@Scheduled(fixedRate=1000)
public void schedulg() {
}
@Async
此注解使用在方法上,声明此方法会在一个单独的线程中执行。不同于Scheduled注解,此注解可以接受参数。使用此注解的方法的返回类型可以是Void也可是返回值。但是返回值的类型必须是一个Future。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)