拒绝 api 带有前导空格或尾随空格的字段的呼叫请求

Reject api call requests with fields having leading or trailing spaces

在 Spring 的 MVC 中,如果我有一个控制器并且我想拒绝任何带有 queryparam 或 requestbody 的请求,这些请求的字段有前导空格或尾随空格,最好的方法是什么?我们可以使用验证器吗?

    @PostMapping(value="/add")
    public ResponseEntity<User> addUser(@Validated(AddUser.class) @Requestbody User user, BindingResult result) {
        ...
        // Business logic here
        // How to check leading and trailing spaces and throw error if present
        ...
        return responseEntity;
    }

在上面说用户只有 firstName 和 lastName 作为字段,我想检查 firstName 和 lastName 没有任何前导或尾随空格,如果有则抛出错误,最好的方法是什么?

您可以构建自己的自定义验证器注释:

@Target({TYPE, FIELD, ANNOTATION_TYPE, TYPE_USE})
@Retention(RUNTIME)
@Constraint(validatedBy = NoSpacesValidator.class)
@Documented
public @interface NoSpaces {
    String message() default "Has trailing or leading spaces!";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}



public class NoSpaceValidator implements ConstraintValidator<NoSpace, String> {

@Override
public void initialize(final NoSpace constraintAnnotation) {
    // Empty as no initialize is necessary
}

@Override
public boolean isValid(final String content, final ConstraintValidatorContext context) {
    return validate(content);
}

private boolean validate(final String content) {
// I suck
    if (StringUtils.isBlank(content)) return false;
    return content.trim().length.equals(content.length)
}
}

然后您可以使用 @NoSpace

注释您的属性

我想我们也可以在用户 class 字段上使用 javax.validation.constraints.Pattern

@Pattern(regexp="^\S.*\S$")
String firstName;

@Pattern(regexp="^\S.*\S$")
String lastName;