对于Spring Boot的几种统一处理方式,我们可以从以下几个方面来进行梳理:
1. 统一异常处理
在Spring Boot中,我们通常会使用@ControllerAdvice
注解来统一处理异常,具体的步骤如下:
- 首先,我们需要新建一个处理器类,并在类上使用
@ControllerAdvice
注解,表示该类是一个统一的异常处理器。 - 然后,我们可以在该类中定义多个
@ExceptionHandler
注解的方法,用于处理不同类型的异常。 - 最后,在每个Controller中可能会抛出异常的方法上使用
@ExceptionHandler
注解,将异常处理的工作交给统一处理器。
下面是一个简单的示例代码:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MyException.class)
public ResponseEntity<String> handleMyException(MyException e) {
return new ResponseEntity<>("my exception", HttpStatus.INTERNAL_SERVER_ERROR);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
return new ResponseEntity<>("unknown exception", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
上面的代码中,我们定义了两个异常处理方法,handleMyException
用于处理自定义的MyException
异常,handleException
则用于处理其他未知类型的异常。在Controller中抛出MyException
异常时,就会自动调用handleMyException
方法进行处理。
2. 统一返回格式
在实际的开发中,我们通常需要统一接口的返回格式,这样可以方便客户端进行解析。Spring Boot中,我们可以使用@RestControllerAdvice
注解来实现统一返回格式。
同样地,我们需要新建一个统一返回处理器类,使用@RestControllerAdvice
注解来标注该类,并定义一个@ExceptionHandler
注解的方法,用于处理所有Controller中抛出的异常。在该方法中封装统一的返回格式即可。
以下是一个示例代码:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public Result handleException(Exception e) {
return Result.fail(e.getMessage());
}
}
上面的代码中,我们定义了一个handleException
方法,用于处理所有Controller中抛出的异常,并统一返回一个Result
格式的结果。
3. 参数校验
在Spring Boot中,我们也可以使用@Valid
注解来进行参数校验。具体的步骤如下:
- 首先,在Controller方法的参数列表中增加
@Valid
注解,即可触发参数校验。 - 然后,在需要校验的参数上增加相应的校验注解即可。
以下是一个示例代码:
@PostMapping("/users")
public Result addUser(@Valid @RequestBody User user) {
// ...
}
上面的代码中,我们在addUser
方法的参数列表中增加了@Valid
注解,表示需要对User
对象进行校验。在User
对象的属性上,我们可以增加相应的校验注解,如@NotNull
等。
示例说明
我们以参数校验为例,来说明具体的使用方式。
假设我们有一个用户实体类User
,其中包含了一个name
属性。我们需要在保存用户信息时,对name
属性进行非空校验。具体的代码如下:
public class User {
@NotNull(message = "name不能为空")
private String name;
// getters and setters
}
在Controller中,我们可以新增用户信息的接口,并在该接口的参数列表中增加@Valid
注解和@RequestBody
注解,如下所示:
@PostMapping("/users")
public Result addUser(@Valid @RequestBody User user) {
// 保存用户信息
}
当我们发送一个不带name
属性的请求时,Spring Boot就会自动进行校验,并返回一个包含了错误信息的结果。例如:
{
"code" : "400",
"msg" : "Bad Request",
"data" : {
"timestamp" : "2021-07-02 10:30:00.000",
"errors" : [ {
"codes" : [ "NotNull.user.name", "NotNull.name", "NotNull.java.lang.String", "NotNull" ],
"arguments" : [ {
"codes" : [ "user.name", "name" ],
"arguments" : null,
"defaultMessage" : "name",
"code" : "name"
} ],
"defaultMessage" : "name不能为空",
"objectName" : "user",
"field" : "name",
"rejectedValue" : null,
"bindingFailure" : false,
"code" : "NotNull"
} ]
}
}
在上述结果中,我们可以看到返回了一个400
错误码,以及一个包含了错误信息的errors
数组,其中标识了具体的错误类型和校验不通过的字段名称等信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot的几种统一处理方式梳理小结 - Python技术站