中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

springboot~為(wei)Money類(lei)型(xing)添(tian)加最(zui)大值(zhi)和最(zui)小值(zhi)的注解校驗

在spring框架里,為(wei)我們(men)集成了很多校驗注(zhu)解(jie),直(zhi)接在字段上(shang)添加對應的(de)注(zhu)解(jie)即(ji)可,這些(xie)注(zhu)解(jie)基(ji)本都是(shi)簡單保留類型的(de),即(ji)int,long,float,double,String等,而如果(guo)你自己(ji)封裝了新的(de)類,那么如果(guo)要(yao)校驗它(ta),注(zhu)解(jie)這塊需(xu)要(yao)自己(ji)寫一下,像money這個類型,如果(guo)希望對它(ta)進行(xing)校驗,注(zhu)解(jie)這塊需(xu)要(yao)自己(ji)去(qu)寫。

普通類型(xing)的(de)注解(jie)校驗

 /**
   * 編號.
   */
  @NotBlank(message = "部門編號不能為空。")
  private String code;

  /**
   * 名稱.
   */
  @NotBlank(message = "部門名稱不能為空。")
  private String name;

自定(ding)義的(de)注解校驗

一 注解類

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;

/**
 * 最(zui)小值約束.
 */
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MinMoneyHandle.class)
public @interface MinMoney {
  /**
   * message.
   *
   * @return
   */
  String message() default "{minMoney.message.error}";

  /**
   * min value.
   *
   * @return
   */
  double value() default 0;

  /**
   * group.
   *
   * @return
   */
  Class<?>[] groups() default {};

  /**
   * payload.
   *
   * @return
   */
  Class<? extends Payload>[] payload() default {};
}

二 處理類

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import org.javamoney.moneta.Money;

/**
 * min handle.
 */
public class MinMoneyHandle implements ConstraintValidator<MinMoney, Money> {
  MinMoney constraint;

  public void initialize(MinMoney constraint) {
    this.constraint = constraint;
  }

  /**
   * valid.
   *
   * @param value   .
   * @param context .
   * @return
   */
  public boolean isValid(Money value, ConstraintValidatorContext context) {
    return value != null && value.getNumber().doubleValue() >= constraint.value();
  }

}

三 使用,直接(jie)在實體(ti)上添加對應(ying)的注(zhu)(zhu)解即可,注(zhu)(zhu)解里的字段有(you)自己的默認值(zhi),程序員(yuan)也可以(yi)顯示為他們(men)賦值(zhi)

@Builder
@Getter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {
  private String name;
  private String email;
  @MinMoney(value = 0, message = "金額不能小于0.")
  @MaxMoney(value = 10, message = "金額不能大于10.")
  private Money price;

}

然后通過WebClientTest進行測試即可

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ValidateTest {
  @Autowired
  WebTestClient webTestClient;

  @Test
  public void test() {
    UserInfo entity = UserInfo.builder()
        .price(Money.of(100, "CNY"))
        .build();
    val obj = webTestClient.post()
        .uri("/add")
        .body(BodyInserters.fromObject(entity))
        .exchange()
        .expectStatus().isEqualTo(400)
        .expectBody();

  }
}

感謝各位的閱讀!

今(jin)天自己(ji)寫出了(le)這個注解,感謝(xie)很(hen)有成就,哈哈!

參考文章:

posted @ 2018-05-10 20:54  張占嶺  閱讀(2643)  評論(0)    收藏  舉報