首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们可以验证不完整的DTO属性吗?

我们可以验证不完整的DTO属性吗?
EN

Stack Overflow用户
提问于 2021-10-24 20:42:57
回答 2查看 96关注 0票数 0

我是spring-boot的新手,我正在尝试创建如下的验证自定义。

代码语言:javascript
复制
@ControllerAdvice
@RestController
public class SpecificResponse extends ResponseEntityExceptionHandler {
    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
            HttpHeaders headers,
            HttpStatus status, WebRequest request) {
            logger.info("1");
            List<String> errors = new ArrayList<String>();
            // String coba = requestContext.getInfo();
            for (FieldError error : ex.getBindingResult().getFieldErrors()) {
            errors.add(error.getField() + ": " + error.getDefaultMessage());
            }
            for (ObjectError error : ex.getBindingResult().getGlobalErrors()) {
            errors.add(error.getObjectName() + ": " + error.getDefaultMessage());
            }
            ApiError apiError = new ApiError();
            apiError.setResponseCode("99");
            apiError.setResponseDesc(ex.getBindingResult().getFieldValue("field") + " Failed");
            apiError.setResponseError(errors.toString());
            return handleExceptionInternal(
                    ex, apiError, headers,HttpStatus.BAD_REQUEST, request);
        
        }
}

下面是我的DTO类

代码语言:javascript
复制
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import org.hibernate.annotations.NotFound;
import lombok.Data;
@Data
public class LiteTimeCreateDTO {
    @NotNull
    @NotEmpty(message = "Customer Code is required")
    @NotFound
    @NotBlank
    private String customerCode;
     
    @NotNull
    @NotEmpty(message = "Customer Code2 is required")
    @NotFound
    @NotBlank
    private String customerCode2;
    
    @Email
    private String customerCode3;
}

下面是邮递员寄给我的东西

代码语言:javascript
复制
{
    // "customerCode": "as",
    "customerCode3": "as@agasdf.com",
    "customerCode2" : "ds"
}

下面是我在控制器中的端点

代码语言:javascript
复制
@GetMapping("")
public ResponseEntity<ApiSuccess> getData( @Valid @RequestBody(required = true) LiteTimeCreateDTO liteTimeCreateDTO,  @RequestHeader(value = "User-Access") String header,  BindingResult result){
      ApiSuccess dataError = new ApiSuccess();
      dataError.setResponseCode("00");
      dataError.setResponseDesc("Get Lite Time Success");
//    dataError.setResponseData(datas);
      return new ResponseEntity<ApiSuccess>(dataError, HttpStatus.CREATED);
}

一切都很好,只是我很好奇如何验证发送的数据是不完整的?当我只发送2个数据时,我的邮递员没有结果响应。如何修复和获取错误响应,因为我的邮递员没有响应。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-25 00:06:00

不要在JSON中使用注释。请使用以下请求正文:

代码语言:javascript
复制
{
    "customerCode3": "as@agasdf.com",
    "customerCode2": "ds"
}
票数 1
EN

Stack Overflow用户

发布于 2021-10-25 06:40:09

JSON仅是数据,如果包含注释,那么它也将是数据。

您可以有一个名为"_comment“(或其他)的指定数据元素,使用该数据的应用程序应该忽略该数据元素。

在生成/接收JSON的过程中使用注释可能会更好,因为它们应该预先知道JSON数据是什么,或者至少知道它的结构。

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

https://stackoverflow.com/questions/69700619

复制
相关文章

相似问题

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