1.@SpringBootApplication
这个注解是spring boot项目的基石,创建springboot项目之后在主类上加
@SpringBootApplication
public class SpringSecurityJwtGuideApplication {
public static void main(java.lang.String[] args) {
SpringApplication.run(SpringSecurityJwtGuideApplication.class, args);
}
}
@SpringBootApplication可以看作是@Configuration(允许在spring上下文中注册额外的bean或导入其他配置类)、@EnableAutoConfiguration(启用springboot的自动配置机制)、@ComponentScan(扫描被@Compoment等注解的bean)注解的集合
2.Spring Bean相关
2.1.@Autowired
自动导入对象到类中,被注入进的类同样要被spring容器管理。若:Service类注入到Controller类中
@Service
public class UserService {
......
}
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
......
}
2.2@Component、@Repository、@Service、@Controller
我们一般使用@Autowried注解让Spring容器帮助我们自动配置bean。要想把类标识成可用的@Autowired注解自动装配的bean的类,可以使用以下注解实现:
@Component:通用的注解,可标注任意类为spring组件。若不知道Bean属于那一层,可以使用这个注解标注
@Repository:对应持久层即Dao层,主要用于数据库相关操作
@Service:对应服务层,主要涉及一些复杂的逻辑,需要用到Dao层
@Controller:对应Spring MVC控制层,主要接受用户请求并调用Service层返回数据给前端页面
2.3@RestController
@RestController注解是@Controller和@ResponseBody的合集,表示这个是控制器bean,并且是将函数的返回值直接填入HTTP响应体中,是REST风格的控制器
2.4@Scope
声明Spring Bean的作用域,使用方法:
@Bean
@Scope("singleton")
public Person personSingleton() {
return new Person();
}
四种常见的Spring Bean的作用域
singleton:唯一bean实例,spring中的bean默认都是单例的
prototype:每次请求都会创建一个新的bean实例
request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效
session:每一个HTTP Session会产生一个新的bean,该bean仅对当前HTTP session内有效
2.5@Configuration
一般用来声明配置类,可以使用@Component注解替代
@Configuration
public class AppConfig {
@Bean
public TransferService transferService() {
return new TransferServiceImpl();
}
}
3.前后端传值
3.1@Pathvariable和@RequestParam
@Pathvariable用于获取路径参数,@RequestParam用于获取查询参数
@GetMapping("/klasses/{klassId}/teachers")
public List<Teacher> getKlassRelatedTeachers(
@PathVariable("klassId") Long klassId,
@RequestParam(value = "type", required = false) String type ) {
...
}
3.2@RequestBody
用于读取Request请求(可能是POST、PUT、DELETE、GET请求)的body部分并且Content-type为application/json格式的数据,接收到数据之后会自动将数据绑定到java对象上。系统会使用HttpMessageConverter或者自定义的HttpMessageConverter将请求的body中的json字符串转换为Java对象。
@PostMapping("/sign-up")
public ResponseEntity signUp(@RequestBody @Valid UserRegisterRequest userRegisterRequest) {
userService.save(userRegisterRequest);
return ResponseEntity.ok().build();
}
注意:一个请求方法只可以有一个@RequestBody,但是可以有多个@RequestParam和@PathVariable.
4.读取配置信息
4.1@Value
使用@Value("${property}")读取比较简单的配置信息
4.2@ConfigurationProperties
通过@ConfigurationProperties读取配置信息并于bean绑定
@Component
@ConfigurationProperties(prefix = "library")
class LibraryProperties {
@NotEmpty
private String location;
private List<Book> books;
@Setter
@Getter
@ToString
static class Book {
String name;
String description;
}
省略getter/setter
......
}
5.参数校验
一些常用的字段验证的注解
@NotEmpty 被注释的字符串不能为null也不能为空
@NotBlank 被注释的字符串非null,并且必须包含一个非空白字符
@Null 被注释的元素必须为null
@NotNull 被注释的元素必须不为null
@AssertTrue 被注释的元素必须为true
@AssertFalse 被注释的元素必须为false
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
6.全局处理Controller层异常
@ControllerAdvice:注解定义全局异常处理类
@ExceptionHandler:注解声明异常处理方法
若方法参数不对的话就会抛出MethodArgumentNotValidException,我们来处理这个异常。
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {
/**
* 请求参数异常处理
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex, HttpServletRequest request) {
......
}
}
7.JPA相关
7.1创建表
@Entity 声明一个类对应一个数据库实体
@Table设置表名
@Entity
@Table(name = "role")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String description;
省略getter/setter......
}
7.2创建主键
@Id声明一个字段为主键
使用@Id声明之后,我们还需要定义主键的生成策略。我们还可以使用@GeneratedValue指定主键生成策略
通过@GeneratedValue直接使用JPA内置提供的四种主键生成策略来指定主键生成策略
7.3设置字段类型
@Column声明字段
7.4指定不持久化特定字段
@Transient 声明不需要与数据库映射的字段,在保存的时候不要保存进数据库
7.5创建枚举类型的字段
@Enumerated
8.事务
在要开启事务的方法上使用@Transactional注解即可
@Transactional(rollbackFor = Exception.class)
public void save() {
......
}