第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 spring 引導服務(wù)中自定義約束驗證器之前,Json 消息解析失敗

在 spring 引導服務(wù)中自定義約束驗證器之前,Json 消息解析失敗

素胚勾勒不出你 2023-04-13 15:28:14
我需要驗證我的 DTO bean 將枚舉作為一個字段,為了達到相同的目的,我遵循了此處提供的一些解決方案,但 json 反序列化甚至在到達我的自定義驗證器之前就失敗了。其他開發(fā)人員在此處提供的解決方案。import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.*;@Documented@Constraint(validatedBy = {EnumValueValidator.class})@Retention(RetentionPolicy.RUNTIME)@Target({  ElementType.ANNOTATION_TYPE,  ElementType.CONSTRUCTOR,  ElementType.FIELD,  ElementType.METHOD,  ElementType.PARAMETER})public @interface EnumValue {  public abstract String message() default "{validation.enum.message}";  public abstract Class<?>[] groups() default {};  public abstract Class<? extends Payload>[] payload() default {};  public abstract Class<? extends java.lang.Enum<?>> enumClass();}import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;public class EnumValueValidator implements ConstraintValidator<EnumValue, Object> {  private Object[] enumValues;  @Override  public void initialize(final EnumValue annotation) {    enumValues = annotation.enumClass().getEnumConstants();  }  @Override  public boolean isValid(final Object value, final ConstraintValidatorContext context) {    if (null != value) {      String contextValue = value.toString();      for (Object enumValue : enumValues) {        if (enumValue.toString().equals(contextValue)) {          return true;        }      }    }    return false;  }}并在我的 WidgetTypeAddOrUpdateDTO 上使用它作為@EnumValue(enumClass = IsActive.class, message = "Only ACTIVE and NOT_ACTIVE accepted.")  private IsActive isActive;我在控制器中的請求方法是這樣的: @PostMapping("/widget/type")  public ResponseEntity<String> addWidgetTypes(      @Validated @RequestBody ValidatorList<WidgetTypeAddOrUpdateDTO> widgetTypeDTOs) {    widgetTypeService.add(widgetTypeDTOs.getValidatedList());    return ResponseEntity.created(URI.create("/dashboard/admin/widget/type")).build();  }
查看完整描述

1 回答

?
慕少森

TA貢獻2019條經(jīng)驗 獲得超9個贊

要應(yīng)用驗證,您需要使用 @Valid annotaion。您必須缺少 @Valid 這就是您的驗證不起作用的原因。

稍后還有一個問題。在您的 DTO WidgetTypeAddOrUpdateDTO 中,枚舉值持有者變量是 IsActive 類型,它是一個枚舉。當 spring 將從 JSON 填充/反序列化 DTO 時,如果枚舉值無效,它將拋出異常,因此您需要將其更改為 String 類型。一旦將其更改為 String,則 string 可以包含任何文本,但您的驗證將受到限制,如果存在無效值,則會產(chǎn)生驗證錯誤。


查看完整回答
反對 回復(fù) 2023-04-13
  • 1 回答
  • 0 關(guān)注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號