为什么不显示来自@NotBlank的消息?
控制器API:
@PostMapping("/create-folder")
public SuccessResponse createFolder(Principal principal, @Valid @RequestBody CreateFolderRequest request) {
return historyService.createFolder(principal.getName(), request.getFolderName());
}
请求主体:
@Data
public class CreateFolderRequest {
@NotBlank(message = "Folder name is mandatory.")
private String folderName;
}
JSON响应:
{
"timestamp": "2020-11-18T11:24:19.769+00:00",
"status": 400,
"error": "Bad Request",
"message": "Validation failed for object='createFolderRequest'. Error count: 1",
"path": "/api/history/create-folder"
}
软件包:有效期:import javax.validation.Valid;
NotBlank:import javax.validation.constraints.NotBlank;
项目中没有全局异常处理程序。
@Valid抛出您在@NotBlank中聚集的MethodArgumentNotValidException的异常是获取内部抛出的异常详细信息,该信息不会返回给客户。您需要提取消息,所以请尝试将此方法添加到控制器中。
@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;
}
上面的代码读取异常中的所有错误,然后获取其详细信息(filedName-errorMessage(并将它们放在列表中,然后将列表返回到具有400坏请求状态的clinet