拒绝 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;
在 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;