日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SpringBoot中notempty注解不生效如何解決

技術介紹

SpringBoot是一個基于Spring框架的快速開發(fā)平臺,它簡化了傳統(tǒng)Spring應用的初始搭建以及開發(fā)過程,在SpringBoot中,我們可以使用注解來配置和驗證數(shù)據(jù),其中@NotEmpty注解就是一個常用的驗證工具,有時候在使用@NotEmpty注解時,會發(fā)現(xiàn)它不生效,導致數(shù)據(jù)驗證失敗,本文將介紹如何解決SpringBoot中@NotEmpty注解不生效的問題。

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設計、成都網(wǎng)站建設與策劃設計,井岡山網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設十載,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:井岡山等地區(qū)。井岡山做網(wǎng)站價格咨詢:028-86922220

問題分析

1、確認注解使用正確

我們需要確認@NotEmpty注解的使用是否正確,在SpringBoot中,我們可以在字段或參數(shù)前添加@NotEmpty注解,以表示該字段或參數(shù)不能為空。

public class User {
    @NotEmpty(message = "用戶名不能為空")
    private String username;
}

2、檢查依賴版本

我們需要檢查項目中的依賴版本是否正確。@NotEmpty注解是Java Bean Validation(JSR 303)規(guī)范的一部分,因此我們需要引入Hibernate Validator作為驗證器,在SpringBoot項目中,我們通常使用Maven或Gradle來管理依賴,請確保項目的依賴中包含以下內容:

spring-boot-starter-validation:用于引入Hibernate Validator驗證器。

hibernate-validator:用于實現(xiàn)Java Bean Validation規(guī)范。

javax.validation:用于定義Java Bean Validation的API。

如果發(fā)現(xiàn)依賴版本不正確,可以通過修改項目的pom.xml或build.gradle文件來更新依賴版本。

解決方案

1、確保實體類上有相應的注解

在使用@NotEmpty注解之前,需要確保實體類上有相應的注解,我們可以在實體類上添加@Entity注解,以表示這是一個數(shù)據(jù)庫表對應的實體類,我們還需要為實體類的字段添加相應的注解,如@Id@GeneratedValue等,這樣,Hibernate才能識別這些實體類和字段,從而正確地進行數(shù)據(jù)驗證。

2、配置驗證器

在使用@NotEmpty注解之前,需要先配置驗證器,在SpringBoot項目中,我們可以通過實現(xiàn)Validator接口來自定義驗證器,我們可以創(chuàng)建一個名為MyValidator的類,并實現(xiàn)Validator接口:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.ValidatorFactory;
import java.util.Set;
@Component
public class MyValidator implements Validator {
    @Autowired
    private static final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    @Override
    public boolean supports(Class clazz) {
        return true;
    }
    @Override
    public void validate(Object target, Errors errors) {
        Validator validate = factory.getValidator();
        Set> violations = validate.validate(target);
        for (ConstraintViolation violation : violations) {
            errors.rejectValue(violation.getPropertyPath().toString(), violation.getMessage());
        }
    }
}

在上述代碼中,我們首先導入了所需的依賴包,然后實現(xiàn)了Validator接口,在validate方法中,我們使用了Hibernate提供的ValidatorFactory來獲取默認的驗證器實例,并對目標對象進行驗證,我們將驗證結果添加到Errors對象中。

3、在Controller中使用驗證器

在使用@NotEmpty注解之前,需要在Controller中注冊自定義的驗證器,在SpringBoot項目中,我們可以通過實現(xiàn)WebMvcConfigurer接口來自定義MVC配置,我們可以創(chuàng)建一個名為MyWebMvcConfigurer的類,并實現(xiàn)WebMvcConfigurer接口:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.validation.Validator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Configuration
@EnableWebMvc
public class MyWebMvcConfigurer implements WebMvcConfigurer {
    @Autowired
    private MyValidator myValidator;
    /**
     * 將自定義的驗證器添加到全局的攔截器鏈中
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LocaleChangeInterceptor()) //添加LocaleChangeInterceptor攔截器處理語言切換問題(防止亂碼)不放在這里!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!不然會報錯找不到LocaleChangeInterceptor攔截器的錯誤信息~_~)     //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因為這個攔截器是用來處理語言切換問題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        返回null即可不加入任何攔截器~_~)     //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因為這個攔截器是用來處理語言切換問題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                返回null即可不加入任何攔截器~_~)     //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因為這個攔截器是用來處理語言切換問題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            返回null即可不加入任何攔截器~_~)     //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因為這個攔截器是用來處理語言切換問題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~                                                                                                                                if (myValidator != null && registry instanceof DefaultHandlerMethodArgumentResolver) {                            registry instanceof DefaultHandlerMethodArgumentResolver defaultHandlerMethodArgumentResolver = (DefaultHandlerMethodArgumentResolver) registry;                            defaultHandlerMethodArgumentResolvers = new CopyOnWriteArrayList<>(defaultHandlerMethodArgumentResolvers);                            defaultHandlerMethodArgumentResolvers.add((RequestBodyArgumentResolver) myValidator);                        } else if (registry instanceof RequestBodyArgumentResolver)                    {                        registry instanceof RequestBodyArgumentResolver requestBodyArgumentResolver = (RequestBodyArgumentResolver) registry;                        requestBodyArgumentResolvers = new CopyOnWriteArrayList<>(requestBodyArgumentResolvers);                        requestBodyArgumentResolvers.add((RequestBodyArgumentResolver) myValidator);                    } else if (registry instanceof HttpMessageConverter)                    {                            registry instanceof HttpMessageConverter httpMessageConverter = (HttpMessageConverter) registry;                            httpMessageConverters = new ArrayList<>(httpMessageConverters);                            for (HttpMessageConverter converter : httpMessageConverters)                            {                                if (converter instanceof FormHttpMessageConverter || converter instanceof JsonHttpMessageConverter || converter instanceof MultipartFormDataHttpMessageConverter || converter instanceof StringHttpMessageConverter)                        {                                    converter = new FormHttpMessageConverter()                                {                                    @Override public List getSupportedMediaTypes()                                    { return Arrays://轉換成List類型 return Arrays$.asList(MediaType$.APPLICATION_JSON);                                    }                                    @Override protected Charset getCharset()                                    { return CharsetUtility$.UTF_8;                                    }                                    };                                    httpMessageConvertersAdd((RequestBodyHttpMessageConverter) converter);                                } else if (converter instanceof ResourceHttpMessageConverter && converter instanceof FormHttpMessageConverter)                        {                                        converter = new ResourceHttpMessageConverter()                                {                                        @Override public List getSupportedMediaTypes()                                        { return Arrays://轉換成List類型 return Arrays$.asList(MediaType$.APPLICATION_JSON);                                        }                                        @Override protected Charset getCharset()                                        { return CharsetUtility$.UTF_8//return null//;                                        }

網(wǎng)站題目:SpringBoot中notempty注解不生效如何解決
文章網(wǎng)址:http://www.dlmjj.cn/article/coddded.html