如何验证RestTemplate响应?

时间:2017-08-28 17:10:22

标签: rest validation spring-boot bean-validation resttemplate

Spring支持在控制器级别进行基于注释的验证。

(1)是否有必要在RestTemplate级别对REST调用的响应进行此类验证?

如果答案是肯定的: (2)RestTemplate是否会支持在未来的某个时间验证来自其他电话的回复?

如果答案是否定的: (3)为什么?

2 个答案:

答案 0 :(得分:1)

现在是2020年,我仍然看不到所需的功能。

@Valid非常适合自动验证,例如已发布的RequestBody。

但是对于验证通过ResponseEntity获取的RestTemplate的主体,我看不到任何奇特的等效项。

因此,我知道的唯一选择是自行完成taken from hereInput是您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. 是的,我会验证回复!
  2. 未来(2020)并没有带来您我想念的功能
  3. 出于这个原因,我也没有答案。

答案 1 :(得分:0)

对我来说,问题非常大。 :)。根据我的理解,您想在REST服务中询问Spring可以支持的验证。

1。是否有必要在RestTemplate级别对REST调用的响应进行此类验证?

实际上,这取决于您的应用或您的业务。您可以在Controller处进行,也可以在服务级别进行,甚至可以进行自定义验证。对我来说,没有人强迫你做任何事情。

但是,根据我的经验,我们应该确保进行验证。所以我的答案是肯定的。

2。是否会在RestTemplate上对此进行支持,以便在将来的某个时间验证来自其他呼叫的响应?

我假设你想要验证的细节?!对?   Spring支持许多事情来进行验证。简单来说,您可以使用PathVariableRequestParameter。例如:

@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)为什么?

无需回答这个问题。 :)

希望有所帮助