优雅的校验参数
在Controller层接收到请求后,可以通过ASP.NET Core提供的[FromBody]和[FromQuery]特性获取请求参数,并通过数据注解(Data Annotations)对参数进行校验,例如:.
[HttpPost("user")]
public IActionResult CreateUser([FromBody] CreateUserRequest request) {
if (!ModelState.IsValid) {
return BadRequest(ModelState);
}
// ...
}
在CreateUserRequest类中可以使用数据注解来校验参数,例如:
public class CreateUserRequest {
[Required(ErrorMessage = "用户名不能为空")]
public string Username { get; set; }
[Required(ErrorMessage = "密码不能为空")]
public string Password { get; set; }
}
如果参数校验不通过,ModelState.IsValid属性将会为false。可以返回带有错误信息的HTTP 400响应。
统一的响应处理
在Controller层返回响应数据时,可以使用ASP.NET Core提供的ActionResult类来进行统一的处理,例如:
[HttpGet("user/{id}")]
public async Task<IActionResult> GetUser(int id) {
User user = await userService.GetUserAsync(id);
if (user == null) {
return NotFound();
}
return Ok(user);
}
如果返回的数据为null,可以使用ResponseEntity.notFound()方法返回HTTP 404响应。如果返回的数据不为null,可以使用ResponseEntity.ok()方法返回HTTP 200响应。
异常处理
在处理业务逻辑时,如果遇到了异常,可以使用Java中的异常机制来处理。在Controller层可以捕获异常并返回错误响应,例如:
@PostMapping("/user")
public ResponseEntity<ErrorResponse> createUser(@Valid @RequestBody User user) {
try {
userService.createUser(user);
return ResponseEntity.ok().build();
} catch (UsernameExistsException ex) {
String errorMessage = "用户名已存在";
ErrorResponse errorResponse = new ErrorResponse(HttpStatus.BAD_REQUEST.value(), errorMessage);
return ResponseEntity.badRequest().body(errorResponse);
}
}
在业务逻辑中抛出的UsernameExistsException异常会被Controller捕获,然后返回HTTP 400响应和错误信息。