当@RequestBody中缺少所需字段时,我正在实现@ControllerAdvice,以帮助API用户理解错误
@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的响应,但是断线并没有像我预期的那样被解释。
提前感谢
发布于 2021-07-15 00:25:51
试试这个,修改这个部分-
String.format(
"Field: %s error details: %s \n",
fieldError.getField(),fieldError.getDefaultMessage()))我刚刚更改了String.format --我在格式本身中添加了lineSeparator ( \n )
https://stackoverflow.com/questions/68383970
复制相似问题