Spring自定义注解
package com.wkrj.module.test.annotation;
import com.wkrj.module.test.processor.MatchAnyProcessor;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@documented
//指定注解的实现类
@Constraint(validatedBy = MatchAnyProcessor.class)
public @interface MatchAny {
String message() default "Value must be match one of options";
String[] contains() default {};
Class>[] groups() default {};
Class extends Payload>[] payload() default {};
}
package com.wkrj.module.test.processor;
import com.wkrj.module.test.annotation.MatchAny;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Arrays;
@Component
public class MatchAnyProcessor implements ConstraintValidator {
private String[] contains = null;
@Override
public void initialize(MatchAny constraintAnnotation) {
this.contains = constraintAnnotation.contains();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
if (contains == null || contains.length <= 0) {
return true;
}
if (value == null || value.isEmpty()) {
return false;
}
if (Arrays.asList(contains).contains(value)) {
return true;
}
return false;
}
}
package com.wkrj.module.test;
import com.wkrj.core.component.jwt.IgnoreToken;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/app/validatedTest")
public class ValidatedTest {
@PostMapping("/location")
@IgnoreToken
public String location(@Validated TestDTO testDTO) {
return "success";
}
@PostMapping("/customer")
@IgnoreToken
public String customer(@Validated TestDTO testDTO) {
return "success";
}
}
package com.wkrj.module.test;
import com.wkrj.ladder.common.core.dto.baseDTO;
import com.wkrj.module.test.annotation.MatchAny;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Data
public class TestDTO implements baseDTO {
@NotNull(message = "ID不能为空")
private Long id;
@NotBlank(message = "名称不能为空")
@Size(min = 1, max = 200, message = "名称1到200个字符")
private String name;
@NotBlank(message = "性别不能为空")
@MatchAny(message = "性别为男或女", contains = {"男", "女"})
private String gender;
}