当前位置: 首页 > 知识库问答 >
问题:

带有java验证API的Spring RestController。错误消息太冗长

谈阎宝
2023-03-14
    @PostMapping(value = "/mycontroller", produces = "application/json")
    @ResponseBody
    @ResponseStatus(HttpStatus.CREATED)
    public MyDTOOuptup myMethod(@Valid @RequestBody MyDTO input) {

        ... body ...
    }
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class MyDTO {

        @NotNull(message="my custom error message for field_a")
        @JsonProperty("field_A")
        private String fieldA;

        @NotNull(message="my custom error message for field_b")
        @JsonProperty("field_B")
        private String fieldB;

    }

但是,我发现这个json体太冗长了。

    {
    "timestamp": "2020-03-31T14:29:42.401+0000",
    "status": 400,
    "error": "Bad Request",
    "errors": [
        {
            "codes": [
                "NotNull.myDTO.field_a",
                "NotNull.field_a",
                "NotNull.java.lang.String",
                "NotNull"
            ],
            "arguments": [
                {
                    "codes": [
                        "myDTO.field_a",
                        "field_a"
                    ],
                    "arguments": null,
                    "defaultMessage": "field_a",
                    "code": "field_a"
                }
            ],
            "defaultMessage": "my custom error message for field_a",
            "objectName": "myDTO",
            "field": "productId",
            "rejectedValue": null,
            "bindingFailure": false,
            "code": "NotNull"
        }
    ],
    "message": "Validation failed for object='myDTO'. Error count: 1",
    "path": "/mycontroller"
}

我如何指定我只需要错误描述消息或类似的东西?有灵巧/纤细的结构吗?

共有1个答案

斜单鹗
2023-03-14

您可以定义自己的自定义异常并添加异常处理程序,

class ExceptionResponse {
    private boolean success = false;
    private String errorCode;
    private String errorMessage;
    private String exception;
    private List<String> errors;
    private String path;
    private String timestamp = LocalDateTime.now().toString();
}

异常处理程序,

@ControllerAdvice
public class CustomExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<ExceptionResponse> invalidInput(MethodArgumentNotValidException ex, HttpServletRequest request) {

        ExceptionResponse response = getExceptionResponse(); //generate exception response

        return ResponseEntity.badRequest().contentType(MediaType.APPLICATION_JSON_UTF8).body(response);
    }
}

希望有帮助!!

 类似资料:
  • 我利用最后几天在Clojure和ClojureScript中深入挖掘了Clojure.spec。 到目前为止,我发现在依赖某种格式的数据的公共函数中,在和中使用规范作为警卫是非常有用的。 有没有人知道如何在或防护中获得更好的错误消息? 我知道和,但这对那些或警卫没有帮助。

  • 我正在使用带有PRG模式的JSF。(在我的导航规则中使用)。 问题是,当我收到验证错误(例如:用户未设置强制值)时,重定向没有完成(即,一篇文章后面跟着同一页的get)。 情况是: > 用户没有输入强制值并提交表单 发生验证错误,同一视图显示错误消息(无PRG) 用户设置强制值并提交== 用户点击后退按钮= 谁能帮帮我吗? 提前感谢。 斯特凡

  • 对于错误的响应,是否可能在响应中返回验证注释消息?我认为这是可能的,但我注意到我们的项目没有给出详细的不良请求信息。 如果请求缺少IDField,我希望返回“IDField is required”。我用的是泽西2.0。我看到的回应是...

  • 我为Money类编写了一个自定义Hibernate验证约束: 它工作正常,除了错误信息。我看到了非常奇怪的行为:找到了资源包,消息按名称解析,但它被包裹在特殊的字符中,如果消息不能按名称解析,通常会出现这些字符: 此处

  • 问题内容: 我最近尝试使用sftp访问我的linux机器,在那里我实现了自己的简单外壳。并且我设置了除root用户以外的其他用户默认使用我的shell(通过编辑/ etc / passwd文件)。然后问题出现了,一旦我尝试通过sftp访问,我将收到一条消息:“接收的消息太长:”,我搜索了解决方案,一种解决方案是将该用户的默认shell改回普通的bash shell。我试过了,而且奏效了,问题在于,

  • 问题内容: 当上面的代码运行时,它会在line上产生错误;。为什么? 问题答案: 不能表示为32位整数(类型)。可以将其表示为64位整数(类型)。Java中的长文字以“ L”结尾: