HystrixBadRequestException
特に検証の分野で、Hystrix が非障害エラーと でどのように機能するかを理解しようとしています。すべての Bean に JSR-303 Bean 検証 (Hibernate バリデーター) を使用します。
public class User {
@Min(1L)
private Long id;
@NotNull
@Email
private String email;
}
public class UserValidator {
private Validator validator;
// Throw exception if the user is invalid; return void otherwise.
public void validateUser(User user) {
Set<ConstraintViolation<User>> violations = validator.validate(user);
if(!violations.isEmpty()) {
return new BadEntityException(violations);
}
}
}
// Hystrix command.
public class SaveUserCommand extends HystrixCommand<User> {
public User user;
public void doSaveUser(User user) {
this.user = user;
execute();
}
@Override
protected User run() {
// Save 'user' somehow
}
@Override
protected User getFallback() {
return null;
}
}
// My service client that uses my Hystrix command.
public class UserClient {
private SaveUserCommandFactory factory = new SaveUserCommandFactory();
private UserValidator validator = new UserValidator();
public User saveUser(User user) {
SaveUserCommand saveUserCommand = factory.newSaveUserCommand();
validator.validate(user);
user = saveUserCommand.doSaveUser(user);
return user;
}
}
これは機能するはずですが、 はこの目的のために作成されたように感じHystrixBadRequestException
ます。どういうわけか、コマンドの外側ではなくコマンドのvalidator
内側に配置できます。ドキュメントによると、この例外は、不正な引数を含む非障害例外を対象としていました。検証をコマンド内に配置してそれを活用する方法がわかりません(失敗した検証がメトリック/統計にカウントされないように)。