Spring支持在控制器级别进行基于注释的验证。
(1)是否有必要在RestTemplate级别对REST调用的响应进行此类验证?
如果答案是肯定的: (2)RestTemplate是否会支持在未来的某个时间验证来自其他电话的回复?
如果答案是否定的: (3)为什么?
答案 0 :(得分:1)
现在是2020年,我仍然看不到所需的功能。
@Valid
非常适合自动验证,例如已发布的RequestBody。
但是对于验证通过ResponseEntity
获取的RestTemplate
的主体,我看不到任何奇特的等效项。
因此,我知道的唯一选择是自行完成taken from here。 Input
是您RequestEntity
身体的类别。 input
是身体本身。
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<Input>> violations = validator.validate(input);
if (!violations.isEmpty()) {
throw new ConstraintViolationException(violations);
}
所以回答您的问题:
答案 1 :(得分:0)
对我来说,问题非常大。 :)。根据我的理解,您想在REST服务中询问Spring可以支持的验证。
1。是否有必要在RestTemplate级别对REST调用的响应进行此类验证?
实际上,这取决于您的应用或您的业务。您可以在Controller处进行,也可以在服务级别进行,甚至可以进行自定义验证。对我来说,没有人强迫你做任何事情。
但是,根据我的经验,我们应该确保进行验证。所以我的答案是肯定的。
2。是否会在RestTemplate上对此进行支持,以便在将来的某个时间验证来自其他呼叫的响应?
我假设你想要验证的细节?!对?
Spring支持许多事情来进行验证。简单来说,您可以使用PathVariable
或RequestParameter
。例如:
@GetMapping("/test/{name}")
private String test(@PathVariable(value = "name", required = true) String name){
//...
}
Spring将验证所有请求,并在缺少必需参数或类型错误时响应400 Bad Request ...
Spring还支持JSR 303 Bean验证:http://beanvalidation.org/1.0/spec/例如在这里:
public class MessageBean {
@NotNull
private String title;
@NotNull
private String message;
// getters/setters/etc
}
或者您想要执行自定义用户响应,例如:
@ExceptionHandler
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ErrorResponse handleException(MethodArgumentNotValidException exception) {
//....
return ErrorResponse.builder().message(errorMsg).build();
}
此处提供了更多详细信息:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-validation
因此,它取决于要求我们在任何级别进行验证的业务。
3。如果答案是否:(3)为什么?
无需回答这个问题。 :)
希望有所帮助