查询用get,其他用post。
500:服务端请求问题。
400:客户端问题。
分页问题(不全,第四阶段day07 vue脚手架)
@SpringBootTest
public class PageHelperTests {
@Autowired
TagMapper mapper;
@Test
void listTagType() {
Integer pageNum = 2; // 页码,从1开始顺序编号
Integer pageSize = 2; // 每页多少条数据
PageHelper.startPage(pageNum, pageSize); // 设计分页参数
List<?> list = mapper.listTagType(); // 【注意】必须紧随“PageHelper.startPage()”之后,否则,可能产生线程安全问题
System.out.println("查询列表完成,列表类型:" + list.getClass().getName());
System.out.println(list);
System.out.println("列表项的数量:" + list.size());
for (Object item : list) {
System.out.println("列表项:" + item);
}
System.out.println();
PageInfo<?> pageInfo = new PageInfo<>(list);
System.out.println(pageInfo);
}
}
vue项目配置
运行老师的vue项目之前先npm install一下
npm i qs -S
并在main.js中加入
import qs from 'qs';
Vue.prototype.qs = qs;
@PathVariable的作用
当我们在编写Web应用程序时,通常会使用URL来定义不同的请求路径。有时候,我们需要从URL路径中获取一些参数值,以便在后台处理请求时使用。
举个例子,假设我们有一个URL路径为/users/{id}
,其中的{id}
表示一个用户的唯一标识。我们希望在后台代码中获取这个id
值,以便根据用户ID来执行相应的操作。
这时,就可以使用@PathVariable
注解。它的作用是告诉框架,我们想要从URL路径中获取特定的变量值,并将其传递给方法的参数。
比如,假设我们有一个控制器方法如下:
@GetMapping("/users/{id}")
public String getUserInfo(@PathVariable Long id) {
// 根据id查询用户信息
// ...
return "user-info";
}
在上面的例子中,@PathVariable Long id
表示我们希望从URL路径中获取一个名为id
的参数,并将其绑定到方法的id
参数上。
当请求路径为/users/123
时,@PathVariable
注解会将URL中的123
提取出来,并将其赋值给id
参数。这样,我们就可以在方法中使用id
参数来执行相应的逻辑,比如查询用户信息。
总的来说,@PathVariable
注解的作用就是从URL路径中提取参数值,并将其传递给方法的参数,以便在后台代码中使用。它使得处理包含变量的URL路径变得更加方便和简洁。
请求类型path和query的区别
在Web开发中,我们可以使用不同的方式向服务器发送请求并传递参数。常见的两种方式是使用路径参数(Path Parameter)和查询参数(Query Parameter)。
- 路径参数(Path Parameter):路径参数是直接包含在请求的URL路径中的参数。它们用于传递对资源的具体标识或操作。路径参数通常放置在URL的特定位置,使用标识符(比如
{}
)来表示。例如,/users/{id}
中的{id}
就是一个路径参数。通过路径参数,我们可以指定要操作的资源或执行的具体动作。 - 查询参数(Query Parameter):查询参数是附加在URL的末尾,以
?
开始,并使用键值对的形式表示。它们用于传递辅助信息、过滤条件或其他可选参数。查询参数以key=value
的形式出现,并使用&
进行分隔。例如,/users?name=John&age=25
中的name
和age
就是查询参数。通过查询参数,我们可以向服务器传递额外的参数信息,以便服务器根据这些信息进行相应的处理。
通俗来说: - 路径参数是用于描述资源标识或具体操作的参数,直接包含在URL的路径中,可以理解为URL的一部分,通常用于指定特定的资源或操作。
- 查询参数是用于传递辅助信息或可选参数的参数,附加在URL的末尾,以
?
开始,并使用key=value
的形式表示,多个参数之间用&
分隔,通常用于传递额外的参数信息。
举个例子来说明:
假设我们有一个博客网站,其中有一个页面用于显示特定用户的信息。使用路径参数的URL可能是/users/{id}
,其中{id}
表示用户的唯一标识。而使用查询参数的URL可能是/users?id={id}
,其中id
是查询参数的键,表示用户的唯一标识。
通过路径参数的URL,我们可以直接指定要显示的用户信息,如/users/123
。而通过查询参数的URL,我们可以在URL末尾附加额外的参数,如/users?id=123&details=true
,这样服务器可以根据details
参数的值来决定是否返回详细信息。
总结起来,路径参数是直接包含在URL路径中的参数,用于资源标识或具体操作;而查询参数是附加在URL末尾的参数,用于传递辅助信息或可选参数。
@Range的用法
@Range
是Hibernate Validator库中的注解,用于验证数值类型或字符串的取值范围是否符合指定的条件。
@Range
注解的用法如下:
@Range(min = minValue, max = maxValue)
其中,minValue
和maxValue
是数值类型或字符串的最小值和最大值。
@Range
注解可以用于以下类型的字段或方法参数:
byte
,short
,int
,long
及其包装类(Byte
,Short
,Integer
,Long
)BigDecimal
和BigInteger
double
和float
及其包装类(Double
,Float
)String
使用@Range
注解可以对字段或方法参数进行取值范围的验证,确保其取值在指定的最小值和最大值之间。
以下是一些示例:
public class Person {
@Range(min = 18, max = 60)
private int age;
// Getters and setters
}
在上述示例中,@Range(min = 18, max = 60)
用于验证age
字段的值在18到60之间。
public void updateScore(@Range(min = 0, max = 100) int score) {
// 更新分数逻辑
}
在上述示例中,@Range(min = 0, max = 100)
用于验证score
参数的值在0到100之间。
如果字段或方法参数的值不在指定的范围内,验证将会失败,并返回相应的验证错误信息。
在实际使用中,你可以使用Hibernate Validator库来进行字段或方法参数的验证。当使用@Range
注解进行取值范围验证时,如果字段或方法参数的值不在指定的范围内,验证将会失败,并返回相应的验证错误信息。
下面是一个示例,演示如何在Spring Boot中使用Hibernate Validator进行验证,并处理验证失败的情况:
- 首先,确保你的项目中已经引入了Hibernate Validator库的依赖。在Maven项目中,你可以添加以下依赖到你的
pom.xml
文件中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
- 在需要验证的实体类中,添加
@Range
注解来定义字段的取值范围。例如:
public class Person {
@Range(min = 18, max = 60, message = "年龄必须在18到60之间")
private int age;
// Getters and setters
}
- 在需要验证的方法中,添加
@Validated
注解来启用验证功能,并在需要验证的参数前添加@Valid
注解。例如:
@RestController
@Validated
public class MyController {
@PostMapping("/update-score")
public ResponseEntity<String> updateScore(@RequestBody @Valid @Range(min = 0, max = 100) int score) {
// 更新分数逻辑
return ResponseEntity.ok("分数更新成功");
}
// 其他方法
}
- 当进行请求时,如果字段或方法参数的值不在指定的范围内,验证将会失败,并返回相应的验证错误信息。你可以使用
BindingResult
对象来获取验证结果,并根据需要进行处理。例如:
@PostMapping("/update-score")
public ResponseEntity<String> updateScore(@RequestBody @Valid @Range(min = 0, max = 100) int score, BindingResult result) {
if (result.hasErrors()) {
List<FieldError> fieldErrors = result.getFieldErrors();
// 处理验证错误信息
return ResponseEntity.badRequest().body("验证失败:" + fieldErrors.get(0).getDefaultMessage());
}
// 更新分数逻辑
return ResponseEntity.ok("分数更新成功");
}
在上述示例中,如果请求中的score
参数不在0到100之间,验证将会失败,BindingResult
对象中将包含相应的验证错误信息。
通过以上步骤,你就可以实现对字段或方法参数的取值范围验证,并进行相应的处理。验证失败时,你可以根据需要返回适当的错误信息给客户端。
需要注意的是,@Range
注解只适用于数值类型或字符串。对于其他类型的字段或参数,可以使用不同的注解进行验证。