Spring Boot

Spring Boot

springboot详细笔记

Spring Boot使用slf4j进行日志记录

java 复制代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public class Test {
    private static final Logger logger = LoggerFactory.getLogger(Test.class);
    // ......
}

application.yml 文件中对日志的配置:

java 复制代码
logging:
  config: logback.xml
  level:
    com.itcodai.course03.dao: trace

常用的日志级别按照从高到低依次为:ERROR、WARN、INFO、DEBUG。

Spring Boot常用注解

@RestController

@RestController 注解包含了原来的 @Controller 和 @ResponseBody 注解

java 复制代码
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    String value() default "";
}

@RequestMapping

是一个用来处理请求地址映射的注解,它可以用于类上,也可以用于方法上。在类的级别上的注解会将一个特定请求或者请求模式映射到一个控制器之上,表示类中的所有响应请求的方法都是以该地址作为父路径;在方法的级别表示进一步指定到处理方法的映射关系。

该注解有6个属性,一般在项目中比较常用的有三个属性:value、method 和 produces。

value 属性:指定请求的实际地址,value 可以省略不写

method 属性:指定请求的类型,主要有 GET、PUT、POST、DELETE,默认为 GET

produces属性:指定返回内容类型,如 produces = "application/json; charset=UTF-8

java 复制代码
@RestController
@RequestMapping(value = "/test", produces = "application/json; charset=UTF-8")
public class TestController {
 
    @RequestMapping(value = "/get", method = RequestMethod.GET)
    public String testGet() {
        return "success";
    }
}

@PathVariable

主要是用来获取 url 参数,Spring Boot 支持 restfull 风格的 url,比如一个 GET 请求携带一个参数 id 过来,我们将 id 作为参数接收,可以使用 @PathVariable 注解。

java 复制代码
@GetMapping("/user/{idd}/{name}")
    public String testPathVariable(@PathVariable(value = "idd") Integer id, @PathVariable String name) {
        System.out.println("获取到的id为:" + id);
        System.out.println("获取到的name为:" + name);
        return "success";
    }

@RequestParam

也是获取请求参数的

@RequestParam 和 @PathVariable 有什么不同呢?

主要区别在于:

同样地,url 上面的参数和方法的参数需要一致,如果不一致,也需要使用 value 属性来说明,比如 url 为:http://localhost:8080/user?idd=1

除了 value 属性外,还有个两个属性比较常用:

  • required 属性:true 表示该参数必须要传,否则就会报 404 错误,false 表示可有可无。
  • defaultValue 属性:默认值,表示如果请求中没有同名参数时的默认值。
java 复制代码
@RequestMapping("/user")
public String testRequestParam(@RequestParam(value = "idd", required = false) Integer id) {
	System.out.println("获取到的id为:" + id);
	return "success";
}

如果表单数据很多 ,我们不可能在后台方法中写上很多参数,每个参数还要 @RequestParam 注解。针对这种情况,我们需要封装一个实体类来接收这些参数,实体中的属性名和表单中的参数名一致即可。

@RequestBody

用于接收前端传来的实体,接收参数也是对应的实体,比如前端通过 json 提交传来两个参数 username 和 password,此时我们需要在后端封装一个实体来接收。在传递的参数比较多的情况下,使用 @RequestBody 接收会非常方便。

@Data

是 Lombok 中的一个注解,它可以自动生成以下代码:

  • 所有字段的 get 和 set 方法。
  • toString() 方法,用于将对象转换成字符串形式,便于日志输出和调试。
  • hashCode() 方法,用于计算对象的哈希值。
  • equals() 方法,用于判断两个对象是否相等。
  • 会生成一个无参构造方法

如果 希望生成所有参数和指定参数的构造方法,可以使用 @AllArgsConstructor 或 RequiredArgsConstructor 等其他 Lombok 注解。需要注意的是,如果在实体类中手动编写了一个带参数的构造方法,使用 @Data 注解会覆盖掉手动编写的构造方法。

Spring Boot集成 Swagger2 展现在线接口文档

实体类注解

  • @ApiModel 注解用于实体类,表示对类进行说明,用于参数用实体类接收。
  • @ApiModelProperty 注解用于类中属性,表示对 model 属性的说明或者数据操作更改。

Controller 类中相关注解

  • @Api 注解用于类上,表示标识这个类是 swagger 的资源。
  • @ApiOperation 注解用于方法,表示一个 http 请求的操作。
  • @ApiParam 注解用于参数上,用来标明参数信息。
  • @ApiImplicitParam 作用在方法上,用于设置单个请求参数,
  • @ApiImplicitParams 作用在方法上,用于包含多个 @ApiImplicitParam
c 复制代码
@PutMapping("/update")
@ApiOperation(value = "更新用户信息", notes = "根据用户登录token更新客户端提交的用户资料")
public Object update() {
    Map<String,Object> map = new HashMap<>();
    map.put("list", null);
    return map;
}
 
c 复制代码
@PostMapping("/register")
@ApiOperation(value = "用户注册", notes = "APP用户注册")
@ApiImplicitParams(value = {
        @ApiImplicitParam(name = "mobile", value = "手机号码", dataType = "string", paramType = "query", example = "13802780104", required = true),
        @ApiImplicitParam(name = "user_name", value = "登录账号", dataType = "string", paramType = "query", example = "lihailin9073", required = true),
        @ApiImplicitParam(name = "password", value = "登录密码", dataType = "string", paramType = "query", example = "123456", required = true),
        @ApiImplicitParam(name = "validate_code", value = "注册验证码", dataType = "string", paramType = "query", example = "3679", required = true)
})
public Object create() {
    Map<String,Object> map = new HashMap<>();
    map.put("list", null);
    return map;
}

各个参数说明:

name :参数名。

value : 参数的具体意义,作用。

required : 参数是否必填。

dataType :参数的数据类型。

paramType :查询参数类型,这里有几种形式:

-------- path 以地址的形式提交数据

-------- query 直接跟参数完成自动映射赋值

--------body :以流的形式提交 仅支持POST

--------header: 参数在request headers 里边提交

--------form: 以form表单的形式提交 仅支持POST

swagger常用注解使用说明

c 复制代码
@Api:用在请求的类上,表示对类的说明
    tags="说明该类的作用,可以在UI界面上看到的注解"
    value="该参数没什么意义,在UI界面上也看到,所以不需要配置"
 
@ApiOperation:用在请求的方法上,说明方法的用途、作用
    value="说明方法的用途、作用"
    notes="方法的备注说明"
 
@ApiImplicitParams:用在请求的方法上,表示一组参数说明
    @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
        name:参数名
        value:参数的汉字说明、解释
        required:参数是否必须传
        paramType:参数放在哪个地方
            · header --> 请求参数的获取:@RequestHeader
            · query --> 请求参数的获取:@RequestParam
            · path(用于restful接口)--> 请求参数的获取:@PathVariable
            · body(不常用)
            · form(不常用)    
        dataType:参数类型,默认String,其它值dataType="Integer"       
        defaultValue:参数的默认值
 
@ApiResponses:用在请求的方法上,表示一组响应
    @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
        code:数字,例如400
        message:信息,例如"请求参数没填好"
        response:抛出异常的类
 
@ApiModel:用于响应类上,表示一个返回响应数据的信息
            (这种一般用在post创建的时候,使用@RequestBody这样的场景,
            请求参数无法使用@ApiImplicitParam注解进行描述的时候)
    @ApiModelProperty:用在属性上,描述响应类的属性
相关推荐
captain37614 分钟前
网络原理(9)-数据链路层
java·网络协议·java-ee
惊讶的猫1 小时前
意图识别置信度和检索重排的分数
java
明月_清风1 小时前
为什么最近开始关注 JEV?几个实战案例告诉你答案
人工智能·后端
caoerzhong1 小时前
仓库管理数字化趋势解读:JeeWMS 开源 Java WMS 视角下的五个演进方向
java·开源
GetcharZp1 小时前
5 分钟拥有自己的 S3:RustFS 上手(MinIO 的 Rust 替代,Apache 2.0 可商用)
后端
程序员JerrySUN1 小时前
Jetson Edge AI 实战01:Nano、Xavier、Orin 怎么选?Jetson 硬件选型详解【视频讲解】
java·数据库·redis·安全·mybatis
行百里er2 小时前
Redis 版本演进、新特性与协议那些事儿
redis·后端
Joy T2 小时前
Spring AI 2.0 Agent 进阶:Memory、State 与 Context Engineering 常见技术全景
java·人工智能·后端·spring·agent入门·agent state
估值探索者3 小时前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘