首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON API响应行中断

JSON API响应行中断
EN

Stack Overflow用户
提问于 2021-07-14 19:21:39
回答 1查看 75关注 0票数 0

当@RequestBody中缺少所需字段时,我正在实现@ControllerAdvice,以帮助API用户理解错误

代码语言:javascript
复制
@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()))应该在每个错误字段之间添加一个中断行。

我得到的一切看起来完全不同:

代码语言:javascript
复制
{
  "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的响应,但是断线并没有像我预期的那样被解释。

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2021-07-15 00:25:51

试试这个,修改这个部分-

代码语言:javascript
复制
String.format(
                "Field: %s error details: %s \n",
                        fieldError.getField(),fieldError.getDefaultMessage()))

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68383970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档