拒绝具有前导或尾随空格字段的api调用请求



在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;
}

在上面说User只有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对您的属性进行注释

我认为我们也可以在User类字段上使用javax.validation.constraints.Pattern

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

最新更新