Cha*_*hra 13 java validation spring-boot reactive spring-webflux
我已经重构了我的代码以使用 spring webflux 但现在@Valid停止工作。它不验证请求正文。
@PostMapping(value = "/getContactInfo",produces = "application/json",consumes = "application/json")
public Flux<UserContactsModel> getUserContacts(@Valid @RequestBody Mono<LoginModel> loginDetail) {
loginDetail.log();
return contactInfoService
.getUserContacts(loginDetailApiMapper.loginModelMonoToLoginBoMono(loginDetail))
.flatMapIterable(
userContactsBO -> contactInfoMapper.userContactBoToModelList(userContactsBO));
}
Run Code Online (Sandbox Code Playgroud)
我收到 200 OK 代替了我从控制器建议返回的 Bad request。
编辑1:
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
public class LoginModel implements Serializable {
private String clientId;
@Pattern(regexp = "^[a-zA-Z0-9]*$", message = "Login ID is invalid")
@NotNull
private String loginId;
}
Run Code Online (Sandbox Code Playgroud)
更新1: 像这样更改代码并在类级别添加@Validated之后
@RestController
@Validated
public class ContactInfoController implements ContactInfoApi {
public Flux<UserContactsModel> getUserContacts(@RequestBody Mono<@Valid LoginModel> loginDetail) {
Run Code Online (Sandbox Code Playgroud)
我收到 javax.validation.ConstraintDeclarationException: HV000197: 未找到类型为reactor.core.publisher.Mono 的类型参数“T”的值提取器。
没有什么对我有用。所以我使用 javax.validator 手动验证它。
@Autowired private Validator validator;
public Flux<UserContactsModel> getUserContacts(@RequestBody Mono<@Valid LoginModel> loginDetail) {
return loginDetail
.filter(this::validate)
.map(....);
}
private boolean validate(LoginModel loginModel) {
Set<ConstraintViolation<LoginModel>> constraintViolations = validator.validate(loginModel);
if (CollectionUtils.isNotEmpty(constraintViolations)) {
StringJoiner stringJoiner = new StringJoiner(" ");
constraintViolations.forEach(
loginModelConstraintViolation ->
stringJoiner
.add(loginModelConstraintViolation.getPropertyPath().toString())
.add(":")
.add(loginModelConstraintViolation.getMessage()));
throw new RuntimeException(stringJoiner.toString());
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10207 次 |
| 最近记录: |