【发布时间】:2021-07-14 19:21:39
【问题描述】:
我正在实现 @ControllerAdvice 以帮助 API 用户在 @RequestBody 中缺少必填字段时理解错误
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public ResponseEntity<ErrorResponse> handleException(MethodArgumentNotValidException ex) {
var errorMessage =
ex.getBindingResult().getFieldErrors().stream()
.map(
fieldError ->
String.format(
"Field: %s error details: %s",
fieldError.getField(), fieldError.getDefaultMessage()))
.collect(joining(System.lineSeparator()));
var errorResponse =
generateError(
BAD_REQUEST, ErrorCode.INVALID_PAYLOAD.getErrorCodeName(), errorMessage);
return new ResponseEntity<>(errorResponse, errorResponse.getHttpStatus());
}
我面临的问题是错误响应中的文本与预期设计不匹配,即我希望在每个字段验证错误之间使用换行符来构建消息。
collect(joining(System.lineSeparator())) 应该在每个错误字段之间添加一个换行符。
我得到的东西看起来完全不同:
{
"apiError": false,
"errorCode": "INVALID_PAYLOAD",
"errorMessage": "Field: message error details: must not be blank\nField: contactName error details: must not be blank\nField: contactEmail error details: must not be blank"
}
正如您在上面的文字中看到的 - 换行符是按照设计引入的。
关于这里可能缺少什么的任何想法?我尝试在终端中查看 Swagger 和 CURL 中的响应,但换行符的解释与我预期的不同。
提前致谢
【问题讨论】:
标签: java json spring-boot