【问题标题】:JSON API response line breaksJSON API 响应换行符
【发布时间】: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


    【解决方案1】:

    试试这个,修改这部分-

    String.format(
                    "Field: %s error details: %s \n",
                            fieldError.getField(),fieldError.getDefaultMessage()))
    

    我刚刚更改了 String.format - 我在格式本身中添加了 lineSeparator ( \n )

    【讨论】:

    • 我试过这个没有用。我也尝试使用 %n 但这不起作用 - 响应文本包含 \n 作为响应字符串的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 2018-05-08
    • 2017-12-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多