java - 带有注释的 Spring http 请求验证
问题描述
我正在尝试在 Spring Boot 应用程序中实现传入 http 请求的验证。我按照以下说明操作: https ://www.yawintutor.com/how-to-validate-request-body-in-spring-boot/ 但我没有得到文章中所述的回复。
我在控制台中遇到异常:DefaultHandlerExceptionResolver: ... DefaultMessageSourceResolvable: default message [must be a well-formed email address]]
根据设置的约束(显然是电子邮件格式)停止进程,但我没有收到 http 响应消息,只是Bad Request
.
这是我的控制器:
@RestController
@Validated
@RequestMapping(path = "/user", produces = MediaType.APPLICATION_JSON_VALUE)
public class UserController {
@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<User> createUser(@Valid @RequestBody User user) {
User createdUser = userService.createUser(user);
return ResponseEntity.ok(user);
}
}
这是实体:
@Entity
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@Email
private String email;
}
我错过了什么?
解决方案
使用 @ControllerAdvice 并创建您自己的响应对象来表示无效参数。下面的示例将返回所有无效参数及其消息。
@ControllerAdvice
public class ExceptionHandlerClass extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
List<String> validationList = ex.getBindingResult().getFieldErrors().stream().map(fieldError->fieldError.getDefaultMessage()).collect(Collectors.toList());
return new ResponseEntity<>(new ExceptionObject(false,validationList), status);
} }
推荐阅读
- terraform - 获取 Terraform 资源已存在错误与 Terraform 刚刚创建的资源
- python - 有没有办法在 tkinter 中为此设置一个重置按钮?
- r - 如何向量化函数
- java - JPA 直接与软 (ID) 参考 - 什么是最好的?
- python - 如何将表添加到数据库?
- sql-server - 访问链接到 SQL:为新创建的记录显示错误的数据,自动编号主键
- c++ - 我不能用 sfml Vector2f 的数据类型声明二维数组
- javascript - 在 axios 调用期间,在挂载时反应未正确加载状态
- snowflake-cloud-data-platform - 数据湖中带时间戳的 csv 外部表的临时缓慢变化的维度具体化
- reactjs - 通过 React 中的 contentEditable 更改后从 div 获取 innerHTML