SpringBoot基础⾯试题
Spring Boot
⼀、@SpringBootApplication
**@SpringBootApplication**是三个注解的集合
注
解
@Configuration@EnableAutoConfiguration@ComponentScan
作⽤允许Spring Boot在上下⽂中注册额外的bean
或导⼊其他配置类
启动Spring Boot的⾃动配置类
扫描@Component(@Service,@Controller)注解的
Bean,默认扫描该类所在的包下的所有类
⼆、 Spring Bean相关
(1)@Autowried
⾃动导⼊对象到类中,被注⼊进的类同样要被Spring容器管理:Server类注⼊到Controller类中
(2)@Component、@Repository、@Service、@Controller
⼀般使⽤@autowired注解让Spring容器帮我们⾃动装配bean。想要把类标识成可⽤于@autowired注解⾃动装配的bean的类,可以采⽤如下注解
@Component:通⽤的注解,可以标注任意类为Spring组件。如果⼀个Bean不知道属于哪⼀个层,可以使⽤@component注解标注@Repository:对应持久层,即Dao层,主要⽤于数据库相关的操作
@Service:对应服务层,主要设计⼀些复杂的逻辑,需要⽤到Dao层
@Controller: 对应Spring MVC控制层,主要⽤于接受⽤户的请求并调⽤Server层放回数据给前端页⾯
(3)RestController
@RestController注解是@Controller和@RequestBody的合计,表⽰这是个控制器bean,并且是将函数的返回值直接填⼊HTTP响应体重,是REST风格的控制器。
注释:单独使⽤@Controller和@RequestBody的话⼀般使⽤在要返回⼀个视图的情况,这种情况⽐较适⽤于传统的Spring MVC的应⽤,对应前后端不分离的情况
@Controller+@RequestBody返回JSON或者XML形式数据
关于@RestController和Controller的对⽐:@Controller返回的是⼀个页⾯ ,@RequestController返回的是⼀个JSON形式的数据
(4) @Scope
申明作⽤域
@Bean
@Scope("singleton")
public Person personSingleton(){
return new Person();
设计模式 java}
四种常见的Spring Bean作⽤域:
singleton:唯⼀bean实例,Spring中的bean默认都是单例的
prototype:每次请求都会创建⼀个新的bean对象
request:每⼀次HTTP请求都会产⽣⼀个新的bean,该bean仅仅在当前的HTTP request内有效
session:每⼀次HTTP请求都会产⽣⼀个⼼的bean,改bean仅仅当前的HTTP session内⽣效
(5) @Configuration
⼀般⽤来申明配置类的,可以使⽤@Component注解代替,使⽤@Configuration更加语义化
三、处理常见的HTTP请求类型
5种常见的HTTP请求:
GET: 请求从服务器获取特定的资源: GET /users
POST: 在服务器创建⼀个新的资源 : POST /users
PUT: 更新服务器上的资源(客户端提供更新后的整个资源)。PUT/users/12
DELETE: 从服务器删除特定的资源。 DELETE /users/12
PATCH: 更新服务器上的资源(客户端提供更佳的属性,可以看做是部分更新),使⽤的较少。
四、前后端传值
(1)@pathVariable和@RequestParm
@PathVariable⽤于获取路径的参数,@RequestParm⽤于查询获取参数
@GetMapping("/klasses/{klassId}/teachers")
public List<Teacher>getKlassRelatedTeachers(
@PathVariable("klassId") Long klassId,
@RequestParam(value ="type", required =false) String type ){
...
}
如果我们的请求url是:/klasses/{klassID}/teachers?type=web
那么我们服务获取得到的数据就是:klassID=123456,type=web
(2)@RequestBody和@ResponseBody
@RequestBody
⽤于读取Request请求(可能是POST,PUT,DELETE,GET请求)的body部分并且Content-Type为application/json格式的数据,接受到数据之后会⾃动将数据绑定到java对象上去,系统会使⽤HttpMessageConverter或者⾃定义的HttpMessageConverter将请求的Body中的json字符串转换为java对象
@ResponseBody
主要⽤来注释返回json数据给前端
五、读取配置⽂件
⼀般使⽤l(代码取⾃Guide哥)
wuhan2020: 2020年初武汉爆发了新型冠状病毒,疫情严重,但是,我相信⼀切都会过去!武汉加油!中国加油!
my-profile:
name: Guide哥
email: koushuangbwcx@163
library:
location:湖北武汉加油中国加油
books:
-name:天才基本法
ostream提供了数据流输出的功能description:⼆⼗⼆岁的林朝⼣在⽗亲确诊阿尔茨海默病这天,得知⾃⼰暗恋多年的校园男神裴之即将出国深造的消息——对⽅考取的学校,恰是⽗亲当年为她放弃的那所。
-name:时间的秩序
description:为什么我们记得过去,⽽⾮未来?时间“流逝”意味着什么?是我们存在于时间之内,还是时间存在于我们之中?卡洛·罗韦利⽤诗意的⽂字,邀请我们思考这⼀亘古难题——时间的本质。
-name:了不起的我
description:如何养成⼀个新习惯?如何让⼼智变得更成熟?如何拥有⾼质量的关系?如何⾛出⼈⽣的艰难时刻?
(1) @value
使⽤@value("${property}")读取⽐较简单的配置信息
@Vlaue("${wuhan2020}")
String wuhan2020
(2) @ConfigurationProperties(常⽤)
通过@ConfigurationProperties读取配置信息并与bean绑定
@Component
format日语怎么说@ConfigurationProperties(prefix ="library")
class LibraryProperties {
@NotEmpty
private String location;
private List<Book> books;
@Setter
@Getter
@TosString
static class Book {
String name ;
String description;
}
....
}
(3) PropertyASource
读取指定的properties⽂件
六、参数校验
(1)为什么要参数校验
及时前端已经有了数据校验的情况下,还是为了防⽌⽤户使⽤⼀些HTTP⼯具绕过前端向后端请求⼀些违法数据
(2)常⽤的校验参数的注释
@NotEmpty 被注释的字符串的不能为 null 也不能为空
@NotBlank 被注释的字符串⾮ null,并且必须包含⼀个⾮空⽩字符
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Pattern(regex=,flag=)被注释的元素必须符合指定的正则表达式
web前端基础面试题@Email 被注释的元素必须是 Email 格式。
@Min(value)被注释的元素必须是⼀个数字,其值必须⼤于等于指定的最⼩值
@Max(value)被注释的元素必须是⼀个数字,其值必须⼩于等于指定的最⼤值
@DecimalMin(value)被注释的元素必须是⼀个数字,其值必须⼤于等于指定的最⼩值
@DecimalMax(value) 被注释的元素必须是⼀个数字,其值必须⼩于等于指定的最⼤值
@Size(max=, min=)被注释的元素的⼤⼩必须在指定的范围内
@Digits (integer, fraction)被注释的元素必须是⼀个数字,其值必须在可接受的范围内
@Past被注释的元素必须是⼀个过去的⽇期
@Future 被注释的元素必须是⼀个将来的⽇期
(3)验证请求体@RequestBody
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
@NotNull(message ="classId 不能为空")
private String classId;
@Size(max =33)
@NotNull(message ="name 不能为空")
private String name;
@Pattern(regexp ="((^Man$|^Woman$|^UGM$))", message ="sex 值不在可选范围")
@NotNull(message ="sex 不能为空")
private String sex;
@Email(message ="email 格式不正确")
@NotNull(message ="email 不能为空")
private String email;
}
我们需要在参数上加上**@Valid**注释,如果请求失败就会抛出 MethodArgumentNotValidException
@RestController
@RequestMapping("/api")
public class PersonController {
@PostMapping("/person")
public ResponseEntity<Person>getPerson(@RequestBody@Valid Person person){
return ResponseEntity.ok().body(person);
}
}
七、全局处理Controller层异常
相关注解
jdk最新安装步骤详解1. @ControllerAdvice:注解定义全局异常处理类
2. @ExceptionHandler:注解申明异常处理⽅法
⼋、事务
再要开启事务的地⽅加上 @Transactional 即可
@Trasactional(rollbackFor = Exception.class)
public void save(){
....
}
如果不配置rollbackFor属性,事务只有在遇到RuntimeException的时候才会回滚
上述的rollbackFor = Exception.class可以在遇到⾮运⾏时异常也会回滚
@Transactional⼀般可以作⽤于类或者是⽅法上
excel vba教程视频谁的比较全面作⽤于类:注释放在类撒上,表⽰所有的public⽅法都是配置相同的事务信息
作⽤于⽅法:当类配置了@Trasactional,⽅法也配置了该注释,⽅法的事务会覆盖类的事务配置信息
九、 json数据处理
(1)、过滤json数据
@JsonIgnoreProperties作⽤于类上⽤于过滤掉特定的字段不解析
//⽣成json时将userRoles属性过滤
@JsonIgnoreProperties({"userRoles"})
public class User {
private String userName;
private String fullName;
private String password;
@JsonIgnore
private List<UserRole> userRoles =new ArrayList<>();
}
@JsonIgnore⼀般⽤于类的属性上,作⽤和上⾯的@JsonIgnoreProperties⼀样
public class User {
private String userName;
private String fullName;
private String password;
//⽣成json时将userRoles属性过滤
@JsonIgnore
private List<UserRole> userRoles =new ArrayList<>();
}
(2)格式化json数据
@JsonFormat⼀般⽤来格式化Json数据
@JsonFormat(shape =JsonFormat.shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",timezone="GMT") private Data data;
@JsonUnwrapped 扁平化对象
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论