Spring Boot API自定义错误响应合同

维吉斯MV:

我正在尝试使用Java Spring启动来构建TODO应用程序。在控制器层添加了一个验证,以确保创建API的待办事项名称长度在2到10之间。我已配置为成功返回以下响应:

{
  "success": true,
  "data": {"name": "hello", "completed": false},
  "errors": []
}

在失败的情况下,我也想退还相同的合同。但是,当我尝试发出失败的请求(名称大于10个字符)时,服务器以某种方式返回以下响应。

{
"timestamp": "2019-11-21T15:41:28.545+0000",
"status": 400,
"error": "Bad Request",
"errors": [
    {
        "codes": [
            "Size.createTodoContract.name",
            "Size.name",
            "Size.java.lang.String",
            "Size"
        ],
        "arguments": [
            {
                "codes": [
                    "createTodoContract.name",
                    "name"
                ],
                "arguments": null,
                "defaultMessage": "name",
                "code": "name"
            },
            10,
            2
        ],
        "defaultMessage": "size must be between 2 and 10",
        "objectName": "createTodoContract",
        "field": "name",
        "rejectedValue": "attend wedding",
        "bindingFailure": false,
        "code": "Size"
    }
],
"message": "Validation failed for object='createTodoContract'. Error count: 1",
"path": "/api/todos"
}

我的有效负载验证如下:

@Getter
public class CreateTodoContract {
  @Size(min = 2, max = 10)
  private String name;

  @NotNull
  private boolean completed;
}

请帮助我了解我应该在哪里更新失败案例的实际合同?

威宝(Vibhath):

您已经弄乱了项目中的一些编码部分。

1)首先,为所有@Size注释和与验证相关的所有其他注释(@ NotNull,@ NotEmpty等)添加“消息”属性。当您尝试发出失败请求时,API将返回您在“ message”属性中提到的错误消息。请参见下面的代码行。将javax.validation.constraints库用于这些注释。其他人也还好。但这要好得多。

@Size(min = 1, message = "email can not be empty")
@NotNull(message = "email can not be null")
private String email;

2)然后,应使用“ BindingResult”类(org.springframework.validation)在控制器(API定义)中捕获这些无效场景,如下所示。以及应为请求正文使用@Valid注释(CreateTodoContract),否则服务器将针对问题中提到的无效方案重新调整响应。

@PostMapping(value = "createTodoContract")
public ResponseEntity<Object> CreateTodoContract(@Valid @RequestBody 
                                                 CreateTodoContract 
                                                 createTodoContractRequest,
                                                 BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        String error = bindingResult.getAllErrors().get(0).getDefaultMessage();
        return new ResponseEntity<>(responseBuilder.build("02", error), status);
    }

    return new ResponseEntity<>(response, response.getStatus());

}

字符串错误= bindingResult.getAllErrors()。get(0).getDefaultMessage()

您可以使用上面的代码行获取错误消息。

如果您的API请求有多个要验证的请求参数,请使用下面提到的代码行来捕获错误消息。否则,API会不时收到您在代码库中提到的不同错误消息(偶发问题)

if (bindingResult.hasErrors()) {
        String error = bindingResult.getAllErrors().get(0).getDefaultMessage();

        if (bindingResult.getAllErrors().size() == 1) {
            return new ResponseEntity<>(responseBuilder.build("02", error), status);

        } else {
            return new ResponseEntity<>(
                    responseBuilder.build("02", "mandatory parameters can not be 
            empty, null or invalid"), status);

        }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring Boot自定义http错误响应?

在错误Spring Boot Rest API期间自定义HTTP响应消息

Spring Boot:根据用户角色自定义API响应

自定义Spring Boot错误响应代码而无需更改默认主体

Spring Boot和自定义404错误页面

spring-boot中的自定义404错误页面

用于InsufficientAuthenticationException的Spring Boot自定义错误对象

Spring Boot自定义错误页面堆栈跟踪

自定义主体错误消息-Spring Boot REST

Spring Boot + Thymeleaf自定义错误消息

spring boot中的自定义错误页面

捕获 404 错误 spring boot 以返回自定义 html

Spring boot 配置自定义sql

Spring Boot Actuator - 自定义端点

Spring Boot:配置自定义MethodSecurityExpressionOperations?

Spring Boot自定义HttpMessageConverter

Spring boot 禁用自定义 HealthIndicator

在Spring Boot中自定义JSON响应以更改键名

未找到Spring Boot 2.2.5 404页面自定义json响应

Spring Boot自定义ErrorAttributes HTTP状态未设置为响应

如何在Spring Boot中获得自定义JSON对象响应

Spring Boot和Spring Security在AuthenticationEntryPoint中无法通过自定义消息发送错误

带有spring-boot的spring-security,自定义登录页面,错误403

Spring Boot + Spring Security的自定义登录页面

Spring \ Spring Boot:是否需要自定义验证器?

Spring Boot REST API / Spring Security:身份验证失败时返回自定义消息

如何在Spring Boot中修复错误自定义注释?

Spring Boot如何在验证@PathVariable参数时返回自定义错误消息

在Spring Boot应用程序中重定向到自定义错误页面时出错