那么我们先从介绍Spring Boot项目完整后端请求Controller层处理的一般流程开始:
-
了解请求方式:HTTP协议定义了很多不同的请求方式,常规的包括GET、POST、PUT、DELETE等,我们需要根据具体的业务场景选择合适的请求方式。
-
定义API接口:在Controller层中,我们需要定义一组或多组API接口,这些接口对应于前端的具体请求,需要包括请求方式、请求地址、请求参数以及返回值的定义。在定义过程中需要注意:接口命名要有意义、遵守RESTful架构风格等。
-
参数检验:在接口的入参中通常需要对参数进行检验,遵循一定的数据格式和范围,需要加入相关的工具类,如:@Valid、@NotBlank、@NotNull等。
-
具体业务操作:对于接口中的业务操作,我们需要根据实际情况进行设计,包括数据存储、数据加工处理的操作,如调用Service、DAO等。
-
异常处理:在业务操作时,我们需要对可能出现的异常进行处理和抛出,避免异常的向上层抛出。如,定义统一返回类型,通过@ExceptionHandler进行异常处理等。
-
日志打印:日志是查找问题和排查错误的重要工具,我们需要在处理每个请求时,对关键信息打印日志,保证问题的及时发现和解决。
接下来,我们通过一个简单的示例对上述流程和具体细节进行说明:
示例1
API接口
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public ResponseVO<User> getUser(@PathVariable("id") Integer id) {
// 具体业务操作
User user = userService.getUserById(id);
if (user == null) {
throw new NotFoundException("用户不存在");
}
return new ResponseVO<>(user);
}
参数检验
public class UserDTO {
@NotBlank(message = "用户名不能为空")
private String username;
...
}
@RequestMapping(value = "/user", method = RequestMethod.POST)
public void addUser(@Valid @RequestBody UserDTO userDTO) {
// 具体业务操作
userService.createUser(userDTO);
}
异常处理
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseVO<String> handleException(Exception e) {
return new ResponseVO<>(ErrorCode.ERROR.getCode(), e.getMessage());
}
@ExceptionHandler(NotFoundException.class)
public ResponseVO<String> handleNotFoundException(NotFoundException e) {
return new ResponseVO<>(ErrorCode.NOT_FOUND.getCode(), e.getMessage());
}
}
示例2
这个示例侧重于如何优雅地处理分页查询。
API接口
@RequestMapping(value = "/users", method = RequestMethod.GET)
public ResponseVO<Page<User>> getUserList(
@RequestParam(value = "pageIndex", defaultValue = "1") Integer pageIndex,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
// 具体业务操作
Page<User> userList = userService.getUserList(pageIndex, pageSize);
return new ResponseVO<>(userList);
}
分页处理
public interface BasePageQuery<T> {
Integer getPageIndex();
Integer getPageSize();
default Integer getOffset() {
return (getPageIndex() - 1) * getPageSize();
}
}
public class PageQuery<T> implements BasePageQuery<T> {
private Integer pageIndex;
private Integer pageSize;
// setter、getter
}
@RequestMapping(value = "/users", method = RequestMethod.GET)
public ResponseVO<Page<User>> getUserList(@ModelAttribute PageQuery<User> pageQuery) {
// 具体业务操作
Page<User> userList = userService.getUserList(pageQuery);
return new ResponseVO<>(userList);
}
以上就是Spring Boot项目完整后端请求Controller层优雅处理的一些攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot项目完整后端请求Controller层优雅处理 - Python技术站