@RestController
@RestController 注解相当于 @ResponseBody + @Controller,表示这个类中的方法返回,均是JSON格式的数据。
@PathVariable(路径变量)
SpingBoot支持restful风格的请求,比如前台请求/user/1,后台可以这样获取
@GetMapping("/user/{userId}")
public String getUserInfo(@PathVariable(value = "userId") Integer id) {
System.out.println("获取到的用户id为:" + id);
return "success";
}
如果请求URL 中的参数和方法中的参数名称相同,可以省略value
属性,否则要指定。
@RequestParam
该注解也是获取获取请求参数,功能和@PathVariable
类似。
但是它们的写法时不同的(以请求userId=1的用户信息为例),而且解析也不一样
@PathVariable:/user/1
@RequestParam:/user?userId=1
@RequestParam传递的参数是封装在Request对象中的,另外它还有个默认值(可以看源码。)
如果前台传入的参数很多,比如表单提交一位学生信息(年龄,籍贯,身高,性别,出生年月,班级,任课老师,成绩,综合评价)。
这样的信息是很多的,而且高度统一,如果用@RequestParam来接收,可能要写数个,甚至数十个@RequestParam。
此时,我们可以用@RequestBody来接收多参数请求。
@RequestBody
@RequestBody能够接收前端传来的多参数,并且将其映射为java实体类。
前提是,参数名必须和实体类的属性名一一对应。
@Data
public class Student {
private String username;
private String password;
private String gender;
}
@PostMapping("/student")
public String test(@RequestBody Student student) {
System.out.println("接收到的用户名为:" + student.getUsername());
System.out.println("接收到的密码为:" + student.getPassword());
System.out.println("接收到的性别为:" + student.getGender());
return "SUCCESS";
}
@validated(参数检验)
spring-boot已经引入基础包,直接使用即可。
可以在controller上,做业务处理前,先对参数进行校验。
controller
/**
* 新增参数配置
*/
@PostMapping
public AjaxResult add(@Validated @RequestBody SysConfig config){
if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))){
return AjaxResult.error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
}
config.setCreateBy(SecurityUtils.getUsername());
return toAjax(configService.insertConfig(config));
}
实体类
@Data
public class SysConfig {
private static final long serialVersionUID = 1L;
@NotBlank(message = "参数名称不能为空")
@Size(min = 0, max = 100, message = "参数名称不能超过100个字符")
private String configName;
@NotBlank(message = "参数键名长度不能为空")
@Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符")
private String configKey;
@NotBlank(message = "参数键值不能为空")
@Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符")
private String configValue;
/** 系统内置(Y是 N否) */
private String configType;
}
此时,当前台传入的参数不满意条件,就会抛出异常,然后由异常中心统一处理
也可以在controller中增加参数BindingResult,自行处理异常,但是这有点侵入封装好的逻辑,不推荐