gpt4 book ai didi

java - 添加绑定(bind)以进行验证

转载 作者:搜寻专家 更新时间:2023-11-01 02:56:51 24 4
gpt4 key购买 nike

我想创建用于验证 Java 对象的 Spring 端点。我试图实现这个例子:

https://www.baeldung.com/validation-angularjs-spring-mvc

我试过这个:

public class WpfPaymentsDTO {

@NotNull
@Size(min = 4, max = 15)
private String card_holder;

private String card_number;
....
}

终点:

 @PostMapping(value = "/payment/{unique_transaction_id}", consumes = { MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<StringResponseDTO> handleWpfMessage(@PathVariable("unique_transaction_id") String unique_transaction_id,
@RequestBody WpfPaymentsDTO transaction, BindingResult result, HttpServletRequest request) throws Exception {

if (result.hasErrors()) {
List<String> errors = result.getAllErrors().stream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.toList());
return new ResponseEntity<>(errors, HttpStatus.OK);
}

return ResponseEntity.ok(new StringResponseDTO("test"));
}

当使用提交 Angular 表单时,我想验证所有字段。但目前我收到此错误:Cannot infer type arguments for ResponseEntity<>

实现这个的正确方法是什么?

最佳答案

您缺少 @Valid 方法签名中的注释。如果您查看引用的示例,您会发现它用于 User。目的。

所以在你的情况下:

@Valid @RequestBody WpfPaymentsDTO transaction

您还在 ResponseEntity<T> 中返回了两种不同的类类型

1) ResponseEntity<StringResponseDTO>在验证成功的场景中

2) ResponseEntity<List<String>>在验证失败的情况下

以上是原因:

But currently I get this error: Cannot infer type arguments for ResponseEntity<>

如果您查看引用的示例,方法返回类型为 ResponseEntity<Object> .

所以你的方法应该改为:

  @PostMapping(value = "/payment/{unique_transaction_id}", 
consumes = { MediaType.APPLICATION_JSON_VALUE },
produces = { MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<Object> handleWpfMessage(
@PathVariable("unique_transaction_id") String unique_transaction_id,
@Valid @RequestBody WpfPaymentsDTO transaction,
BindingResult result,
HttpServletRequest request) throws Exception {

更新:

Is there a way to find out for which variable the validation error is raised?

是的,您可以像这样得到所有字段绑定(bind)错误:

List<FieldError> errors = bindingResult.getFieldErrors();
for (FieldError error : errors ) {
System.out.println ("Validation error in field: " + error.getField()
+ "! Validation error message: " + error.getDefaultMessage()
+ "! Rejected value:" + error.getRejectedValue());
}

关于java - 添加绑定(bind)以进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55415479/

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