Как проверить ответ RestTemplate?
Spring поддерживает проверку на основе аннотаций на уровне контроллера.
(1) Необходимо ли проводить такие проверки также на уровне RestTemplate для ответов на вызовы REST?
Если ответ Да: (2) Будет ли это поддерживаться на RestTemplate для проверки ответов на остальные вызовы когда-нибудь в будущем?
Если ответ Нет: (3) почему?
1 ответ
Сейчас 2020 год, и я все еще не вижу запрошенной функции.
В @Valid
приятно автоматически проверять, например, опубликованное RequestBody.
Но для проверки тела ResponseEntity
получено через RestTemplate
, Я не вижу навороченного эквивалента.
Так что единственный вариант, который я знаю, - это сделать это самостоятельно, взятым отсюда.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);
}
Итак, чтобы ответить на ваш вопрос:
- Да, я бы подтвердил ответ!
- будущее (2020) не принесло функции, которую мы с вами скучаем
- По причине отсутствия этого ответа у меня тоже нет ответа.
Для меня вопросы довольно большие.:). Насколько я понимаю, вы хотели бы запросить подтверждение в службе REST, которое может поддерживать Spring.
1. Необходимо ли проводить такие проверки также на уровне RestTemplate для ответов на вызовы REST?
На самом деле, это зависит от ваших приложений или вашего бизнеса. Вы можете сделать это в Контроллере, или в Уровне обслуживания, или даже сделать свою собственную проверку. Для меня никто не заставляет тебя что-либо делать.
Однако, как показывает мой опыт, мы должны сделать проверку наверняка. Так что мой ответ здесь ДА.
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: 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/
Таким образом, это зависит от бизнеса, который требует от нас проверки на любом уровне.
3. Если ответ Нет: (3) почему?
Не надо на это отвечать.:)
надеюсь, это поможет