添加绑定以进行验证
Add binding for validation
我想创建 Spring 端点来验证 Java 对象。我试图实现这个例子:
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<>
实现这个的正确方法是什么?
尝试使用 Angular 响应式表单(FormGroup 和 FormControl)。
我认为这样更容易。
您的方法签名中缺少 @Valid
注释。
如果您查看所引用的示例,您会发现它用于 User
对象。
所以在你的情况下:
@Valid @RequestBody WpfPaymentsDTO transaction
此外,您 return 在 ResponseEntity<T>
中使用了两种不同的 class 类型
1) ResponseEntity<StringResponseDTO>
在验证成功的场景中
2) ResponseEntity<List<String>>
在验证失败的情况下
以上是原因:
But currently I get this error: Cannot infer type arguments for
ResponseEntity<>
如果你看看你引用的例子,方法 return 类型是 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?
是的,您可以像这样获取所有字段绑定错误:
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());
}
我想创建 Spring 端点来验证 Java 对象。我试图实现这个例子:
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<>
实现这个的正确方法是什么?
尝试使用 Angular 响应式表单(FormGroup 和 FormControl)。 我认为这样更容易。
您的方法签名中缺少 @Valid
注释。
如果您查看所引用的示例,您会发现它用于 User
对象。
所以在你的情况下:
@Valid @RequestBody WpfPaymentsDTO transaction
此外,您 return 在 ResponseEntity<T>
1) ResponseEntity<StringResponseDTO>
在验证成功的场景中
2) ResponseEntity<List<String>>
在验证失败的情况下
以上是原因:
But currently I get this error: Cannot infer type arguments for ResponseEntity<>
如果你看看你引用的例子,方法 return 类型是 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?
是的,您可以像这样获取所有字段绑定错误:
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());
}