【发布时间】:2020-05-17 03:47:01
【问题描述】:
我是 spring-boot 的新手,我正在尝试向我的 DTO 类添加验证,如下所示。
import javax.validation.constraints.NotBlank;
@Getter
@Setter
public class EmployeeDto {
private Long id;
@NotBlank(message = "Employee first name is required")
private String firstName;
private String lastName;
@NotBlank(message = "EmployeeNUM is required")
private String employeeNum;
}
下面是我用来保存员工的 REST 端点。
import javax.validation.Valid;
@PostMapping("/employee")
public ResponseEntity<?> addEmployee(@Valid @RequestBody EmployeeDto employeeDto) throws ClassNotFoundException {
return ResponseEntity.ok(employeeService.saveEmployee(deptId,employeeDto));
}
我创建了一个如下所示的 Validation 类来验证 DTO 字段。
@ControllerAdvice
@RestController
public class Validation {
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public Map<String, String> handleValidationExceptions(
MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getAllErrors().forEach((error) -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
errors.put(fieldName, errorMessage);
});
return errors;
}
}
预期输出是
{ "firstName":"员工的名字是必填项", "employeeNum":"EmployeeNUM 是必需的" }
但是当通过邮递员到达端点时,我只收到 400 错误请求。 我的代码有什么问题?如上所述,如何修复并获得预期的输出?
【问题讨论】:
-
您是否通过请求传递了值?
-
是的。我为文件传递了空字符串
-
@SupunWijerathne 是的。我得到了正确的状态,但没有得到响应正文。
-
@SupunWijerathne 仍然无法正常工作。我只是按照下面的文档,对用实体注释的实体类做同样的事情,它的工作我认为问题是 DTO 没有实体注释。我们不能在 DTO 类上添加实体,那么还有另一种方法来处理 DTO 类的验证吗? baeldung.com/spring-boot-bean-validation
-
我发布了答案。找到了不同的方式。
标签: java spring hibernate spring-boot