gpt4 book ai didi

java - 在 REST API 中进行 DTO 验证后,将代码错误作为 ResponseEntity 返回

转载 作者:行者123 更新时间:2023-12-05 05:19:59 25 4
gpt4 key购买 nike

使用 https://www.leveluplunch.com/java/tutorials/017-validate-spring-rest-webservice-request/教程,我想在不重新加载页面的情况下使用 java 验证表单。我在 REST API 中执行此操作。我的 Controller

@PutMapping(value = "/changeEmail", consumes = MediaType.APPLICATION_JSON_VALUE)
public HttpEntity<ChangeEmailDTO> showChangeEMail(
@RequestBody @Valid ChangeEmailDTO changeEmailDTO,
BindingResult result
) {
System.out.println("Email: " + changeEmailDTO.getEmail());

if(result.hasErrors()) {
System.out.println("Error: " + changeEmailDTO.getEmail());
return ResponseEntity.badRequest().body(changeEmailDTO);
}

System.out.println("Success: " + changeEmailDTO.getEmail());
return ResponseEntity.ok(changeEmailDTO);
}

接受电子邮件地址,在注释中验证

    @NotEmpty
@Getter @Setter private String email;

根据上面的指南,它应该以 json 形式返回一个错误代码。它收到的唯一效果是 https://zapodaj.net/81a6db4635168.png.html .所以它返回对象本身,而不是像教程中那样

{"timestamp":1417379464584,"status":400,"error":"Bad Request","exception":"org.springframework.web.bind.MethodArgumentNotValidException","message":"Validation failed for argument at index 0 in method: public org.springframework.http.ResponseEntity<demo.AgencyResource> demo.AgencyController.saveAgency(demo.AgencyResource), with 2 error(s): [Field error in object 'agencyResource' on field 'name': rejected value [null]; codes [NotNull.agencyResource.name,NotNull.name,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [agencyResource.name,name]; arguments []; default message [name]]; default message [may not be null]] [Field error in object 'agencyResource' on field 'id': rejected value [50]; codes [Max.agencyResource.id,Max.id,Max.java.lang.Integer,Max]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [agencyResource.id,id]; arguments []; default message [id],20]; default message [must be less than or equal to 20]] ","path":"/agencies"}

如何返回这样的数据?

最佳答案

您正在使用 BindingResult.hasErrors() 控制 ValidationException 情况下的响应。在这种情况下,您返回带有 Bad Request http 状态代码的 DTO,如下所示。

return ResponseEntity.badRequest().body(changeEmailDTO);

提到的教程具有 spring 提供的默认异常处理程序,它将异常转换为该消息。

只需从方法签名中删除 BindingResult,然后任何类型的验证异常都会被默认的异常处理程序捕获。然后你会得到提到的响应。

关于java - 在 REST API 中进行 DTO 验证后,将代码错误作为 ResponseEntity 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com